perm filename GI.PRO[AP,DBL] blob
sn#118064 filedate 1974-09-03 generic text, type T, neo UTF8
00100 LOG LENAT
00200 Job 9 on TTY42 1-SEP-74 20:24
03400
03500 @LISP
03600
03700
03800 INTERLISP-10 29-AUG-74 ...
03900
04000
04100 Good evening, Doug.
04200 ←LOAD(STOR.L)
04300 FILE CREATED 1-SEP-74 16:25:45
04400 STORCOMS
04500
04600 GC: 1
04700 1494, 6102 FREE WORDS
04800
04900 GC: 8
05000 5028, 75035 FREE WORDS
05100
05200 GC: 12
05300 1011, 2201 FREE WORDS
05400
05500 GC: 28
05600 2031, 5103 FREE WORDS
05700
05800 GC: 30
05900 497, 3057 FREE WORDS
06000
06100 TYPE USED ASSIGNED SYSTEM
06200 1 42 6144 34816
06300 2 5120 5120 55296
06400 4 0 512 512
06500 8 595 75776 16384
06600 12 27 6656 13824
06700 16 0 512 512
06800 18 6 1536 1024
06900 24 4 512 1024
07000 28 17 5120 8704
07100 30 14 3072 2560
07200 SUM 5825 104960 134656
07300 STOR.L;6
07400 ←LOAD(PUP6.COM)
07500 COMPILED ON 1-SEP-74 16:03:51
07600 FILE CREATED 1-SEP-74 15:51:05
07700 (LISTFILES redefined)
07800
07900 GC: 1
08000 2608, 2608 FREE WORDS
08100
08200 GC: 1
08300 1380, 1380 FREE WORDS
08400
08500 GC: 1
08600 491, 491 FREE WORDS
08700
08800 GC: 1
08900 400, 400 FREE WORDS
09000
09100 GC: 1
09200 212, 724 FREE WORDS
09300
09400 GC: 1
09500 396, 396 FREE WORDS
09600
09700 GC: 1
09800 213, 213 FREE WORDS
09900 PUP6COMS
10000
10100 GC: 16
10200 0, 512 FREE WORDS
10300
10400 DWIM DISABLED. TO GET AUTOMATIC EDITF FROM SOURCE, TYPE DWIM(T)
10500 MINI PUP FILE; USE FAD OR AD OR MAKEFILE PUP6COMS
10600 (PUP6COMS reset)
10700 PUP6.COM;2
10800 ←STORAGE(T)
10900
11000 TYPE USED ASSIGNED SYSTEM
11100 1 6559 6656 34816
11200 2 5120 5120 55296
11300 4 23 512 512
11400 8 41591 75776 16384
11500 12 5967 6656 13824
11600 16 512 1024 512
11700 18 421 1536 1024
11800 24 273 512 1024
11900 28 5071 5120 8704
12000 30 2712 3072 2560
12100 SUM 68249 105984 134656
12200 NIL
12300 ←LISPXSTATS)
12400 (4 LISPX INPUTS)
12500 (2660 UNDO SAVES)
14000 (0:7:3 CONSOLE TIME)
14100 (0:0:0 OF IT IN THE EDITOR)
14200
14300 (0:2:16 CPU TIME)
14400 (0:0:0 OF IT IN DWIM)
14500 T
14600 ←LOAD(GIF)
14700 FILE CREATED 20-AUG-74 17:31:19
14800 GIFVARS
14900
15000 GC: 28
15100 20, 532 FREE WORDS
15200 GIF.;3
18900 ←ENTER(T)
19000
19100 I CAN GUESS ALL YOUR ANSWERS FOR A WHILE; SHOULD I? YES
19200 USER INTERRUPT LEVEL... 0
19300
19400 PUP: (PUP WANTS ANY TASK)
19500
19600
19700 USER: (WRITE A PROGRAM WHICH INFERS GRAMMARS)
19800
19900 PUP: (PUP IS ABOUT TO WRITE A PROGRAM TO DO (GRAMMATICAL:INFERENCE))
20000
20100
20200 PUP: ((G:I GRAMMATICAL:INFERENCE G GI) IS THE SET OF PLAUSIBLE NAMES OF
20300 **(GRAMMATICAL INFERENCE) WHICH IS AN EXPANSION
20400 OF (GRAMMATICAL:INFERENCE))
20500
20600
20700 PUP: (PUP WANTS USER TO TYPE IN NAME FOR (GRAMMATICAL:INFERENCE))
20800
20900 I DON'T KNOW ANY NAMES FOR (VECTOR GRAMMATICAL:INFERENCE), SO YOU'LL HAV
21000 **E TO
21100 TYPE A BRAND NEW NAME IN TO ME.
21200 USER: GI
21300
21400 PUP: (PUP AND USER ARE ABLE TO REFER TO (GRAMMATICAL:INFERENCE) AS TASK:
21500 **NAME WHICH IS GI:1)
21600
21700
21800 PUP: (THE NAME OF THE PROGRAM TO DO (GRAMMATICAL:INFERENCE) IS GI:1)
21900
22000
22100 MOVE CURSOR TO (VECTOR GI:1 TYPE OF (VECTOR GRAMMATICAL:INFERENCE))
22200 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
22300 **ION:((VECTOR ABILITY TO INFER GRAMMARS
22400 DIFFERENTLY, GIVEN THEIR TYPE) (VECTOR ABILITY TO INFER GRAMMARS OF A GI
22500 **VEN, FIXED TYPE) (ERROR!))(ABOVE, ARG1 REFERS
22600 TO NIL ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE'; IT IS ONLY FOR ME TO LOO
22700 **K AT)
22800
22900
23000 SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1 OR A MEANS THAT IS C(VEC
23100 **TOR ABILITY TO INFER GRAMMARS DIFFERENTLY, GIVEN THEIR TYPE) IS CORREC
23200 **T.
23300 2 MEANS THAT (VECTOR ABILITY TO INFER GRAMMARS OF A GIVEN, FIXED TYPE) I
23400 **S CORRECT.
23500
23600 SHOULD I DISCUSS RAMIFICATIONS?NO
23700
23800 USER: 2
23900
24000 WARNING: SATISFY IS SHAKING ITS HEAD ABOUT THIS ONE:(VECTOR ENCODABLE SE
24100 **CTION ORIG:FUNC)
24200 MOVE CURSOR TO GI:1
24300
24400
24500 PUP IS NOW GOING TO ENCODE THE PIECE
24600 (INFER:FIXEDCLASS:GRAMMARS)
24700
24800
24900 OF THE FUNCTION GI:1 INTO LISP. FUNCTION NAMES WILL
25000 BE QUERIED IN PREORDER, AS NEEDED.
25100
25200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR INFER:FIXEDCLASS:GRAMMARS)
25300 I DON'T KNOW ANY NAMES FOR (VECTOR INFER:FIXEDCLASS:GRAMMARS), SO YOU'LL
25400 ** HAVE TO
25500 TYPE A BRAND NEW NAME IN TO ME.
25600 USER: IFG
25700
25800 THE NAME CHOSEN IS IFG:2
25900
26000 DRAW A LINE FROM THE FUNCTION CALL NIL OF THE FUNCTION GI:1 TO THIS NEW
26100 ** PIECE OF CODE, WHICH IS ITS BODY:
26200
26300 (GI:1
26400 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
26500 (IFG:2)))
26600 (GI:1 redefined)
26700
26800 MOVE CURSOR TO (VECTOR IFG:2 TYPE OF (VECTOR INFER:FIXEDCLASS:GRAMMARS))
26900 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ALTERNATIVES DE
27000 **CISION:(INFER:PHRASESTRUCTURE:GRAMMARS
27100 INFER:CONTEXTSENSITIVE:GRAMMARS INFER:CONTEXTFREE:GRAMMARS INFER:REGULAR
27200 **:GRAMMARS)
27300
27400 SINCE WE HAVE A SIMPLE SET OF ALTERNATIVES, SIMPLY TYPE IN YOUR CHOICE
27500 SHOULD I DISCUSS RAMIFICATIONS?NO
27600
27700
27800 USER: INFER:PHRASESTRUCTURE:GRAMMARS
27900
28000 MOVE CURSOR TO IFG:2
28100
28200
28300 PUP IS NOW GOING TO ENCODE THE PIECE
28400 (INFER:PHRASESTRUCTURE:GRAMMARS)
28500
28600
28700 OF THE FUNCTION IFG:2 INTO LISP. FUNCTION NAMES WILL
28800 BE QUERIED IN PREORDER, AS NEEDED.
28900
29000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR INFER:PHRASESTRUCTURE:GRAMMAR
29100 **S)
29200 I DON'T KNOW ANY NAMES FOR (VECTOR INFER:PHRASESTRUCTURE:GRAMMARS), SO Y
29300 **OU'LL HAVE TO
29400 TYPE A BRAND NEW NAME IN TO ME.
29500 USER: NIL
29600
29700 THE NAME CHOSEN IS INFER:PHRASESTRUCTURE:GRAMMARS:3
29800
29900 DRAW A LINE FROM THE FUNCTION CALL (IFG:2) OF THE FUNCTION IFG:2 TO THI
30000 **S NEW PIECE OF CODE, WHICH IS ITS BODY:
30100
30200 (IFG:2
30300 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
30400 (INFER:PHRASESTRUCTURE:GRAMMARS:3)))
30500 (IFG:2 redefined)
30600 DEBUG F1 FDESC UNKNOWN (VECTOR PROGN (VECTOR SETQ SET:OF:RULES NIL) (VE
30700 **CTOR PARTITION:A:DOMAIN))
30800 GC: 30
30900 394, 394 FREE WORDS
31000
31100 MOVE CURSOR TO INFER:PHRASESTRUCTURE:GRAMMARS:3
31200
31300
31400 PUP IS NOW GOING TO ENCODE THE PIECE
31500 (PROGN (SETQ SET:OF:RULES NIL)
31600 (PARTITION:A:DOMAIN))
31700
31800
31900 OF THE FUNCTION INFER:PHRASESTRUCTURE:GRAMMARS:3 INTO LISP. FUNCTION N
32000 **AMES WILL
32100 BE QUERIED IN PREORDER, AS NEEDED.
32200
32300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARTITION:A:DOMAIN)
32400 I DON'T KNOW ANY NAMES FOR (VECTOR PARTITION:A:DOMAIN), SO YOU'LL HAVE T
32500 **O
32600 TYPE A BRAND NEW NAME IN TO ME.
32700 USER: PAD
32800
32900 THE NAME CHOSEN IS PAD:4
33000
33100
33200 DRAW A LINE FROM THE FUNCTION CALL (INFER:PHRASESTRUCTURE:GRAMMARS:3) O
33300 **F THE FUNCTION INFER:PHRASESTRUCTURE:GRAMMARS:3 TO THIS NEW PIECE OF C
33400 **ODE, WHICH IS ITS BODY:
33500
33600 (INFER:PHRASESTRUCTURE:GRAMMARS:3
33700 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
33800 (PROGN (SETQ SET:OF:RULES NIL)
33900 (PAD:4))))
34000 (INFER:PHRASESTRUCTURE:GRAMMARS:3 redefined)
34100
34200 MOVE CURSOR TO (VECTOR PAD:4 TYPE OF (VECTOR PARTITION:A:DOMAIN))
34300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SOMEOF DECISION
34400 **:(PARTITION:BY:TAKE:ELE:AND:CLASS
34500 PARTITION:BY:TAKE:CLASS:GET:ELE PARTITION:BY:TAKE:ELE:GET:CLASS)
34600 SINCE THE DECISION IS SOME:OF, TYPE ANY ORDERED SUBSET OF:
34700 (A .... PARTITION:BY:TAKE:ELE:AND:CLASS)
34800 (B .... PARTITION:BY:TAKE:CLASS:GET:ELE)
34900 (C .... PARTITION:BY:TAKE:ELE:GET:CLASS)
35000
35100 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
35200 SHOULD I DISCUSS RAMIFICATIONS?NO
35300
35400 USER: (A C)
35500
35600
35700 AT THIS POINT, I ALMOST RECOMMENDED VIRTUAL STRUCTURING, BUT DECIDED
35800 AGAINST IT. THE LIST STRUCTURE WOULD HAVE BEEN DIVIDED INTO THESE
35900 PIECES: (PARTITION:BY:TAKE:ELE:AND:CLASS:PART:OF:NIL PARTITION:BY:TAKE:C
36000 **LASS:GET:ELE:PART:OF:NIL
36100 PARTITION:BY:TAKE:ELE:GET:CLASS:PART:OF:NIL)
36200 (I GUESS THAT EACH OF THE ABOVE :NIL-S WOULD GET REPLACED BY SOMETHING L
36300 **IKE ":PARTITION:LIST")
36400
36500
36600 MOVE CURSOR TO PAD:4
36700
36800
36900 PUP IS NOW GOING TO ENCODE THE PIECE
37000 (REPEATEDLY (TAKE:HOLD:OF ELEMENT)
37100 (COND ((IS:OF:TYPE ELEMENT (COMMENT PARTITION:BY:TAKE:ELE:
37200 **AND:CLASS))
37300 (PROGN (SETQ PRESULT (GET:HOLD:OF NAME:OF:CLASS))
37400 (COMMENT NOTICE THAT WE DO NOT NECESSARILY H
37500 **AVE TO MAKE THE PRECEDING 'GUESS' IN ALL
37600 POSSIBLE ALGORITHMS)
37700 (TAKE:HOLD:OF NAME:OF:CLASS)
37800 (COMPLEX:MODIFY:STRUCTURE NAME:OF:CLASS ELEM
37900 **ENT PRESULT)))
38000 (T (PROGN (SETQ PRESULT (GET:HOLD:OF NAME:OF:CLASS))
38100 (TAKE:HOLD:OF NAME:OF:CLASS)
38200 (COMPLEX:MODIFY:STRUCTURE NAME:OF:CLASS EL
38300 **EMENT PRESULT)))))
38400
38500
38600 OF THE FUNCTION PAD:4 INTO LISP. FUNCTION NAMES WILL
38700 BE QUERIED IN PREORDER, AS NEEDED.
38800
38900 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
39000 I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
39100 TYPE A BRAND NEW NAME IN TO ME.
39200 USER: NIL
39300
39400 THE NAME CHOSEN IS TAKE:HOLD:OF:5
39500
39600 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
39700 I DON'T KNOW ANY NAMES FOR (VECTOR ELEMENT), SO YOU'LL HAVE TO
39800 TYPE A BRAND NEW NAME IN TO ME.
39900 USER: NIL
40000
40100 THE NAME CHOSEN IS ELEMENT:6
40200
40300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
40400 I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
40500 TYPE A BRAND NEW NAME IN TO ME.
40600 USER: NIL
40700
40800 THE NAME CHOSEN IS IS:OF:TYPE:7
40900
41000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
41100 IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
41200 **D?
41300
41400 USER: YES
41500
41600 SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
41700 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
41800 YOU WANT. AM I RIGHT?
41900 USER: YES
42000
42100 THE NAME CHOSEN IS ELEMENT:6
42200
42300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR GET:HOLD:OF)
42400 I DON'T KNOW ANY NAMES FOR (VECTOR GET:HOLD:OF), SO YOU'LL HAVE TO
42500 TYPE A BRAND NEW NAME IN TO ME.
42600 USER: NIL
42700
42800 THE NAME CHOSEN IS GET:HOLD:OF:8
42900
43000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
43100 IS THIS THE SAME AS A (VECTOR TAKE:HOLD:OF) WHICH WE'VE ALREADY SEEN AND
43200 ** NAMED?
43300
43400 USER: NO
43500 I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
43600 TYPE A BRAND NEW NAME IN TO ME.
43700 USER: NIL
43800
43900 THE NAME CHOSEN IS TAKE:HOLD:OF:9
44000
44100 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR COMPLEX:MODIFY:STRUCTURE)
44200 GC: 30
44300 378, 378 FREE WORDS
44400 I DON'T KNOW ANY NAMES FOR (VECTOR COMPLEX:MODIFY:STRUCTURE), SO YOU'LL
44500 **HAVE TO
44600 TYPE A BRAND NEW NAME IN TO ME.
44700 USER: NIL
44800
44900 THE NAME CHOSEN IS COMPLEX:MODIFY:STRUCTURE:10
45000
45100 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
45200 IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
45300 **D?
45400
45500 USER: YES
45600
45700 SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
45800 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
45900 YOU WANT. AM I RIGHT?
46000 USER: YES
46100
46200 THE NAME CHOSEN IS ELEMENT:6
46300
46400 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR GET:HOLD:OF)
46500 IS THIS THE SAME AS A (VECTOR GET:HOLD:OF) WHICH WE'VE ALREADY SEEN AND
46600 **NAMED?
46700
46800 USER: YES
46900
47000 SINCE GET:HOLD:OF:8 IS THE ONLY NAME FOR (VECTOR GET:HOLD:OF),
47100 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
47200 YOU WANT. AM I RIGHT?
47300 USER: YES
47400
47500 THE NAME CHOSEN IS GET:HOLD:OF:8
47600
47700 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR TAKE:HOLD:OF)
47800 IS THIS THE SAME AS A (VECTOR TAKE:HOLD:OF) WHICH WE'VE ALREADY SEEN AND
47900 ** NAMED?
48000
48100 USER: NO
48200 I DON'T KNOW ANY NAMES FOR (VECTOR TAKE:HOLD:OF), SO YOU'LL HAVE TO
48300 TYPE A BRAND NEW NAME IN TO ME.
48400 USER: NIL
48500
48600 THE NAME CHOSEN IS TAKE:HOLD:OF:11
48700
48800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR COMPLEX:MODIFY:STRUCTURE)
48900 IS THIS THE SAME AS A (VECTOR COMPLEX:MODIFY:STRUCTURE) WHICH WE'VE ALRE
49000 **ADY SEEN AND NAMED?
49100
49200 USER: YES
49300
49400 SINCE COMPLEX:MODIFY:STRUCTURE:10 IS THE ONLY NAME FOR (VECTOR COMPLEX:M
49500 **ODIFY:STRUCTURE),
49600 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
49700 YOU WANT. AM I RIGHT?
49800 USER: YES
49900
50000 THE NAME CHOSEN IS COMPLEX:MODIFY:STRUCTURE:10
50100
50200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
50300 IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
50400 **D?
50500
50600 USER: YES
50700
50800 SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
50900 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
51000 YOU WANT. AM I RIGHT?
51100 USER: YES
51200
51300 THE NAME CHOSEN IS ELEMENT:6
51400
51500 DRAW A LINE FROM THE FUNCTION CALL (PAD:4) OF THE FUNCTION PAD:4 TO THI
51600 **S NEW PIECE OF CODE, WHICH IS ITS BODY:
51700
51800 (PAD:4
51900 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
52000 (PROG NIL
52100 LABEL:1
52200 (TAKE:HOLD:OF:5 ELEMENT:6)
52300 (COND
52400 ((IS:OF:TYPE:7 ELEMENT:6 (COMMENT PARTITION:BY:TAKE:ELE:AND:
52500 **CLASS))
52600 (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS))
52700 (COMMENT NOTICE THAT WE DO NOT NECESSARILY HAVE TO
52800 **MAKE THE PRECEDING 'GUESS'
52900 IN ALL POSSIBLE ALGORITHMS)
53000 (TAKE:HOLD:OF:9 NAME:OF:CLASS)
53100 (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:
53200 **6 PRESULT)))
53300 (T (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS))
53400 (TAKE:HOLD:OF:11 NAME:OF:CLASS)
53500 (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT
53600 **:6 PRESULT))))
53700 (GO LABEL:1)
53800 (COMMENT INFINITE LOOP IN THIS PROG))))
53900 (PAD:4 redefined)
54000 (COMMENT PRESULT IS NOT A BEING YET)
54100
54200 MOVE CURSOR TO (VECTOR ELEMENT:6 TYPE OF (VECTOR ELEMENT))
54300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
54400 **SION:(WHAT IS AN ELEMENT)
54500 SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
54600 TYPE IN THE DEFINITION OF ELEMENT:6
54700 SHOULD I DISCUSS RAMIFICATIONS?NO
54800
54900 USER: (A DESCRIPTION OF AN UNCOMMENTED STRING)
55000
55100 PUP: ((U:S UNCOMMENTED:STRING U US) IS THE SET OF PLAUSIBLE NAMES OF (UN
55200 **COMMENTED STRING) WHICH IS AN EXPANSION OF
55300 (UNCOMMENTED STRING))
55400
55500
55600 PUP: (PUP WANTS USER TO TYPE IN NAME FOR (UNCOMMENTED STRING))
55700
55800
55900 GC: 30
56000 379, 379 FREE WORDS
56100 I DON'T KNOW ANY NAMES FOR (VECTOR UNCOMMENTED VECTOR STRING), SO YOU'LL
56200 ** HAVE TO
56300 TYPE A BRAND NEW NAME IN TO ME.
56400 USER: NIL
56500
56600 PUP: (PUP AND USER ARE ABLE TO REFER TO (UNCOMMENTED STRING) AS TNAME WH
56700 **ICH IS UNCOMMENTED:STRING:12)
56800
56900
57000 MOVE CURSOR TO ELEMENT:6
57100
57200
57300 PUP IS NOW GOING TO ENCODE THE PIECE
57400 (STRUCTURE (CLASS:NAME NAME N)
57500 (LETTERS STRING L))
57600
57700
57800 OF THE FUNCTION ELEMENT:6 INTO LISP. FUNCTION NAMES WILL
57900 BE QUERIED IN PREORDER, AS NEEDED.
58000
58100
58200 DRAW A LINE FROM THE FUNCTION CALL (ELEMENT:6 PRESULT) OF THE FUNCTION
58300 **ELEMENT:6 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
58400
58500 (ELEMENT:6
58600 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
58700 (STRUCTURE (CLASS:NAME NAME N)
58800 (LETTERS STRING L))))
58900 (ELEMENT:6 redefined)
59000
59100 MOVE CURSOR TO (VECTOR IS:OF:TYPE:7 TYPE OF (VECTOR IS:OF:TYPE))
59200 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
59300 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
59400 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
59500 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
59600 TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
59700 TYPE IN THE DEFINITION OF IS:OF:TYPE:7
59800
59900 SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
60000 LOGICAL EXPRESSION, WHICH IS TRUE IF ELEMENT:6 IS OF
60100 THE (PARTITION:BY:TAKE:ELE:AND:CLASS) TYPE, AND SHOULD BE FALSE IF IT IS
60200 **NT OF
60300 THAT TYPE.
60400
60500 SHOULD I DISCUSS RAMIFICATIONS?NO
60600
60700 USER: (THE FRONT PART OF ELEMENT ISNT ???)
60800 (IS ??? A LITERAL CONSTANT (WHOSE VALUE SHOULD BE ITSELF) (REPLY YES OR
60900 **NO, PLEASE) USER...)
61000 YES
61100
61200 MOVE CURSOR TO IS:OF:TYPE:7
61300
61400
61500 PUP IS NOW GOING TO ENCODE THE PIECE
61600 (NOT (EQUAL (CAR ELEMENT)
61700 ???))
61800
61900
62000 OF THE FUNCTION IS:OF:TYPE:7 INTO LISP. FUNCTION NAMES WILL
62100 BE QUERIED IN PREORDER, AS NEEDED.
62200
62300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR ELEMENT)
62400 IS THIS THE SAME AS A (VECTOR ELEMENT) WHICH WE'VE ALREADY SEEN AND NAME
62500 **D?
62600
62700 USER: YES
62800
62900 SINCE ELEMENT:6 IS THE ONLY NAME FOR (VECTOR ELEMENT),
63000 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
63100 YOU WANT. AM I RIGHT?
63200 USER: YES
64200
64300 THE NAME CHOSEN IS ELEMENT:6
64400
64500
64600 DRAW A LINE FROM THE FUNCTION CALL (IS:OF:TYPE:7 ELEMENT:6 (COMMENT PAR
64700 **TITION:BY:TAKE:ELE:AND:CLASS)) OF THE FUNCTION IS:OF:TYPE:7 TO THIS NE
64800 **W PIECE OF CODE, WHICH IS ITS BODY:
64900
65000 (IS:OF:TYPE:7
65100 (LAMBDA (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
65200 (NOT (EQUAL (CAR ELEMENT:6)
65300 ???))))
65400
65500
65600 IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:2) STILL THE PROPER EXPLI
65700 **CIT
65800 ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:7?
65900 USER: NO
66000
66100 WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
66200 USER: T
66300 (IS:OF:TYPE:7 redefined)
66400
66500 MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:5 TYPE OF (VECTOR TAKE:HOLD:OF))
66600 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
66700 **ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
66800 (VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
66900 **HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
67000 FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
67100 **EAD IN AT THIS POINT IN THE PROGRAM FLOW?
67200 USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO EL
67300 **EMENT:6 ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE';
67400 IT IS ONLY FOR ME TO LOOK AT)
67500
67600 FLOW:PRECEDED ISNT IN YET.
67700 LOOK AT ARGUMENT AND ANSWER T OR NIL:
67800 (VECTOR SETQ ELEMENT:6 ANY1)
67900
68000 (THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... NIL
68100
68200 AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
68300 USER CHANNEL AFTER ALL!!!
68400 (PUP IS ABOUT TO ENCODE AN ASSIGNMENT: (CLASS:NAME NAME N) WILL BE SET T
68500 **O SOME PART OF ARG1 WHICH IS GOING TO BE
68600 INSTANTIATED DURING THE RUNNING OF THE PROGRAM AS ELEMENT:6 .PUP WANTS A
68700 ** NAME FOR THIS 'SOME PART OF' FUNCTION.)
68800
68900 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR SOME:PART:OF)
69000 I DON'T KNOW ANY NAMES FOR (VECTOR SOME:PART:OF), SO YOU'LL HAVE TO
69100 TYPE A BRAND NEW NAME IN TO ME.
69200 USER: NIL
69300
69400 THE NAME CHOSEN IS SOME:PART:OF:13
69500 (PUP IS ABOUT TO ENCODE AN ASSIGNMENT: (LETTERS STRING L) WILL BE SET TO
69600 ** SOME PART OF ARG1 WHICH IS GOING TO BE
69700 INSTANTIATED DURING THE RUNNING OF THE PROGRAM AS ELEMENT:6 .PUP WANTS A
69800 ** NAME FOR THIS 'SOME PART OF' FUNCTION.)
69900
70000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR SOME:PART:OF)
70100 IS THIS THE SAME AS A (VECTOR SOME:PART:OF) WHICH WE'VE ALREADY SEEN AND
70200 ** NAMED?
70300
70400 USER: NO
70500 I DON'T KNOW ANY NAMES FOR (VECTOR SOME:PART:OF), SO YOU'LL HAVE TO
70600 TYPE A BRAND NEW NAME IN TO ME.
70700 USER: NIL
70800
70900 THE NAME CHOSEN IS SOME:PART:OF:14
71000
71100 MOVE CURSOR TO TAKE:HOLD:OF:5
71200
71300
71400 PUP IS NOW GOING TO ENCODE THE PIECE
71500 (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6))
71600 (SET ARG1 (PREAD))
71700 (SETQ CLASS:NAME:NAME:N (SOME:PART:OF:13 (EVAL ARG1)))
71800 (SETQ LETTERS:STRING:L (SOME:PART:OF:14 (EVAL ARG1)))
71900 T)
72000
72100
72200 OF THE FUNCTION TAKE:HOLD:OF:5 INTO LISP. FUNCTION NAMES WILL
72300 BE QUERIED IN PREORDER, AS NEEDED.
72400
72500 GC: 30
72600 377, 377 FREE WORDS
72700
72800
72900 DRAW A LINE FROM THE FUNCTION CALL (TAKE:HOLD:OF:5 ELEMENT:6) OF THE FU
73000 **NCTION TAKE:HOLD:OF:5 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
73100
73200 (TAKE:HOLD:OF:5
73300 (NLAMBDA (ARG1)
73400 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
73500 (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6))
73600 (SET ARG1 (PREAD))
73700 (SETQ CLASS:NAME:NAME:N (SOME:PART:OF:13 (EVAL ARG1)))
73800 (SETQ LETTERS:STRING:L (SOME:PART:OF:14 (EVAL ARG1)))
73900 T)))
74000 (TAKE:HOLD:OF:5 redefined)
74100 (COMMENT NAME:OF:CLASS IS NOT A BEING YET)
74200
74300 MOVE CURSOR TO (VECTOR GET:HOLD:OF:8 TYPE OF (VECTOR GET:HOLD:OF))
74400 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SOMEOF DECISION
74500 **:(COMPUTE SEARCH GENERATE:AND:TEST)
74600 SINCE THE DECISION IS SOME:OF, TYPE ANY ORDERED SUBSET OF:
74700 (A .... COMPUTE)
74800 (B .... SEARCH)
74900 (C .... GENERATE:AND:TEST)
75000
75100 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
75200 SHOULD I DISCUSS RAMIFICATIONS?NO
75300
75400 USER: (B)
75500
75600 YOU MUST GIVE ME A LIST OF ALL THE VALUES THAT COULD EVER OCCUR AS
75700 NAMES ON THE LIST STRUCTURE SET:OF:POSSIBLE:NAMES:OF:CLASS
75800 IF THIS ISN'T MEANINGFUL, REPLY NIL.
75900 USER: (LEGAL ILLEGAL)
76000
76100
76200 DOES THERE EXIST A PREDICATE WHICH IS TRUE PRECISELY WHEN AN ELEMENT
76300 IS LEGAL AND IS NIL IFF THE ELEMENT IS ILLEGAL?
76400 USER: (YES OR NO, FOR NOW......) YES
76500
76600 OK. NOW GIVE ME THIS PREDICATE, IN TERMS OF ELEMENT:6
76700 I SUGGEST THAT THIS INVOLVES ONE OF THESE: (PARSE TEST)
76800 USER: (ELEMENT:6 CAN BE PARSED)
76900
77000 MOVE CURSOR TO (VECTOR GET:HOLD:OF:8 TYPE OF (VECTOR GET:HOLD:OF))
77100 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
77200 **N:(DOES AN ALGORITHM ALREADY EXIST WHICH GETS
77300 PRECISELY ELEMENT:6)SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO
77400 **.
77500 SHOULD I DISCUSS RAMIFICATIONS?NO
77600
77700 NOW TYPE YOUR ANSWER: NO
77800
77900 OK, READY TO MOVE ON NOW.
78000
78100 MOVE CURSOR TO GET:HOLD:OF:8
78200
78300
78400 PUP IS NOW GOING TO ENCODE THE PIECE
78500 (PROGN (SETQ POSSIBLE:NAME:OF:CLASS (COND ((PARSE ELEMENT:6)
78600 LEGAL)
78700 (T ILLEGAL)))
78800 (PUPRIN1 "
78900 MY GUESS FOR THIS IS ")
79000 (PUPRINT POSSIBLE:NAME:OF:CLASS))
79100
79200
79300 OF THE FUNCTION GET:HOLD:OF:8 INTO LISP. FUNCTION NAMES WILL
79400 BE QUERIED IN PREORDER, AS NEEDED.
79500
79600 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
79700 I DON'T KNOW ANY NAMES FOR (VECTOR PARSE), SO YOU'LL HAVE TO
79800 TYPE A BRAND NEW NAME IN TO ME.
79900 USER: NIL
80000
80100 THE NAME CHOSEN IS PARSE:15
80200
80300
80400 DRAW A LINE FROM THE FUNCTION CALL (GET:HOLD:OF:8 NAME:OF:CLASS) OF THE
80500 ** FUNCTION GET:HOLD:OF:8 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
80600
80700 (GET:HOLD:OF:8
80800 (NLAMBDA (DUMMY:ARGUMENT:1)
80900 (PROGN (SETQ POSSIBLE:NAME:OF:CLASS (COND
81000 ((PARSE:15 ELEMENT:6)
81100 LEGAL)
81200 (T ILLEGAL)))
81300 (PUPRIN1 "
81400 MY GUESS FOR THIS IS ")
81500 (PUPRINT POSSIBLE:NAME:OF:CLASS))))
81600 (GET:HOLD:OF:8 redefined)
81700
81800 MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:9 TYPE OF (VECTOR TAKE:HOLD:OF))
81900 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
82000 **ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
82100 (VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
82200 **HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
82300 FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
82400 **EAD IN AT THIS POINT IN THE PROGRAM FLOW?
82500 USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO NA
82600 **ME:OF:CLASS ;ALSO, PLEASE IGNORE THE THIRD
82700 'CHOICE'; IT IS ONLY FOR ME TO LOOK AT)
82800
82900 FLOW:PRECEDED ISNT IN YET.
83000 LOOK AT ARGUMENT AND ANSWER T OR NIL:
83100 (VECTOR SETQ NAME:OF:CLASS ANY1)
83200
83300 (THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... T
83400 (THE ASSIGNMENT WHICH SET NAME:OF:CLASS ,NAMELY (COMMENT HER IS THE FLOW
83500 ** ASSIGNMENT, WHICH SHOULD ACTUALLY BE SET
83600 BY THE FLOW:PRECEDED ROUTINE) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF N
83700 **AME:OF:CLASS BE PREAD IN AT THIS POINT IN
83800 THE PROGRAM FLOW? USER...)
83900 NO
84000
84100 AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
84200 USER CHANNEL AFTER ALL!!!
84300
84400 MOVE CURSOR TO TAKE:HOLD:OF:9
84500
84600
84700 PUP IS NOW GOING TO ENCODE THE PIECE
84800 (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT TO
84900 ** AN ALREADY EXISITNG VALUE)
85000 (SET ARG1 OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS))
85100
85200
85300 OF THE FUNCTION TAKE:HOLD:OF:9 INTO LISP. FUNCTION NAMES WILL
85400 BE QUERIED IN PREORDER, AS NEEDED.
85500
85600
85700 DRAW A LINE FROM THE FUNCTION CALL (TAKE:HOLD:OF:9 NAME:OF:CLASS) OF TH
85800 **E FUNCTION TAKE:HOLD:OF:9 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY
85900 **:
86000
86100 (TAKE:HOLD:OF:9
86200 (NLAMBDA (ARG1)
86300 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
86400 **)
86500 (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT
86600 **TO AN ALREADY EXISITNG VALUE)
86700 (SET ARG1 OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS))))
86800
86900 GC: 8
87000 27069, 27069 FREE WORDS
87100 (TAKE:HOLD:OF:9 redefined)
87200
87300 MOVE CURSOR TO (VECTOR COMPLEX:MODIFY:STRUCTURE:10 TYPE OF (VECTOR COMPL
87400 **EX:MODIFY:STRUCTURE))
87500 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
87600 **N:(MIGHT THE MODIFICATION DEPEND UPON THE
87700 RESULTS -- PRESULT -- OF OUR GUESS AND ON SOME PARTS OF THE INPUT -- ELE
87800 **MENT -- AS WELL AS DEPENDING ON THE TRUE CLASS
87900 NAME -- NAME:OF:CLASS ?????)SINCE THE DECISION IS BOOLEAN, JUST ANSWER Y
88000 **ES OR NO.
88100 SHOULD I DISCUSS RAMIFICATIONS?NO
88200
88300 NOW TYPE YOUR ANSWER: YES
88400
88500 GC: 30
88600 390, 390 FREE WORDS
88700
88800 OK, READY TO MOVE ON NOW.
88900
89000 MOVE CURSOR TO COMPLEX:MODIFY:STRUCTURE:10
89100
89200
89300 PUP IS NOW GOING TO ENCODE THE PIECE
89400 (NLSETQ (EVAL (TUPLE APPLY* (COLON:BACK (LIST ARG1 ARG3 (QUOTE MODIFY:
89500 **STRUCTURE)))
89600 (TUPLE SOME:PART:OF:14 ARG2)
89700 (TUPLE QUOTE SET:OF:RULES))))
89800
89900
90000 OF THE FUNCTION COMPLEX:MODIFY:STRUCTURE:10 INTO LISP. FUNCTION NAMES
90100 **WILL
90200 BE QUERIED IN PREORDER, AS NEEDED.
90300
90400
90500 DRAW A LINE FROM THE FUNCTION CALL (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF
90600 **:CLASS ELEMENT:6 PRESULT) OF THE FUNCTION COMPLEX:MODIFY:STRUCTURE:10
90700 **TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
90800
90900 (COMPLEX:MODIFY:STRUCTURE:10
91000 (LAMBDA (ARG1 ARG2 ARG3)
91100 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
91200 **)
91300 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS ELEMENT:6)
91400 (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS PRESULT)
91500 (NLSETQ (EVAL (TUPLE APPLY*(COLON:BACK (LIST ARG1 ARG3 (QUOTE MODIFY
91600 **:STRUCTURE)))
91700 (TUPLE SOME:PART:OF:14 ARG2)
91800 (TUPLE QUOTE SET:OF:RULES))))))
91900 (COMPLEX:MODIFY:STRUCTURE:10 redefined)
92000
92100 MOVE CURSOR TO (VECTOR TAKE:HOLD:OF:11 TYPE OF (VECTOR TAKE:HOLD:OF))
92200 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
92300 **ION:((SETQQ QUALIFIER BRAND) (FLOW:PRECEDED
92400 (VECTOR SETQ (@ ARG1) ANY1)) (SETQQ QUALIFIER CORRECT) (PUPRINT (TUPLE T
92500 **HE ASSIGNMENT WHICH SET (@ ARG1) ,NAMELY (@
92600 FLOW:ASSIGNMENT) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF (@ ARG1) BE PR
92700 **EAD IN AT THIS POINT IN THE PROGRAM FLOW?
92800 USER...)) (MEMBER (PREAD) (VECTOR NIL NO N)) T)(ABOVE, ARG1 REFERS TO NA
92900 **ME:OF:CLASS ;ALSO, PLEASE IGNORE THE THIRD
93000 'CHOICE'; IT IS ONLY FOR ME TO LOOK AT)
93100
93200 FLOW:PRECEDED ISNT IN YET.
93300 LOOK AT ARGUMENT AND ANSWER T OR NIL:
93400 (VECTOR SETQ NAME:OF:CLASS ANY1)
93500
93600 (THIS WOULD NORMALLY BE DONE BY SYSTEM, NOT BY USER .... T
93700 (THE ASSIGNMENT WHICH SET NAME:OF:CLASS ,NAMELY (COMMENT HER IS THE FLOW
93800 ** ASSIGNMENT, WHICH SHOULD ACTUALLY BE SET
93900 BY THE FLOW:PRECEDED ROUTINE) ,WAS DONE EARLIER; SHOULD A NEW VALUE OF N
94000 **AME:OF:CLASS BE PREAD IN AT THIS POINT IN
94100 THE PROGRAM FLOW? USER...)
94200 YES
94300
94400 AHA!!!! I'VE RESOLVED IT MYSELF!!! NO NEED TO INTERACT WITH THE SLOW
94500 USER CHANNEL AFTER ALL!!!
94600
94700 MOVE CURSOR TO TAKE:HOLD:OF:11
94800
94900
95000 PUP IS NOW GOING TO ENCODE THE PIECE
95100 (PROGN (PUPRINT (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS))
95200 (SET ARG1 (PREAD))
95300 T)
95400
95500
95600 OF THE FUNCTION TAKE:HOLD:OF:11 INTO LISP. FUNCTION NAMES WILL
95700 BE QUERIED IN PREORDER, AS NEEDED.
95800
95900
96000 DRAW A LINE FROM THE FUNCTION CALL (TAKE:HOLD:OF:11 NAME:OF:CLASS) OF T
96100 **HE FUNCTION TAKE:HOLD:OF:11 TO THIS NEW PIECE OF CODE, WHICH IS ITS BO
96200 **DY:
96300
96400 (TAKE:HOLD:OF:11
96500 (NLAMBDA (ARG1)
96600 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF:CLASS
96700 **)
96800 (PROGN (PUPRINT (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS))
96900 (SET ARG1 (PREAD))
97000 T)))
97100 (TAKE:HOLD:OF:11 redefined)
97200
97300 MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
97400 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
97500 **N:(HERE WE LAY THE SKELETON OF ANY PARSE ROUTINE)
97600 GC: 8
97700 26442, 26442 FREE WORDS
97800
97900 MOVE CURSOR TO PARSE:15
98000
98100
98200 PUP IS NOW GOING TO ENCODE THE PIECE
98300 (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INT
98400 **O NOTING ITS INSTANTIATION HERE IN THE CODE)
98500 (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S TREE)
98600 (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S LIST OF RULES US
98700 **ED)
98800 (SETQ ARG1 (SOME:PART:OF:14 ARG1))
98900 (COMMENT PERHAPS A LOOP GOES HERE, ENCLOSING (COMMENT SOME JOIN
99000 **ED FORWARD/BACKWARD PARSE CALLS)))
99100
99200
99300 OF THE FUNCTION PARSE:15 INTO LISP. FUNCTION NAMES WILL
99400 BE QUERIED IN PREORDER, AS NEEDED.
99500
99600
99700 DRAW A LINE FROM THE FUNCTION CALL (PARSE:15 ELEMENT:6) OF THE FUNCTION
99800 ** PARSE:15 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
99900
00100 (PARSE:15
00200 (LAMBDA (ARG1)
00300 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
00400 (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 I
00500 **NTO NOTING ITS INSTANTIATION HERE IN THE CODE)
00600 (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S TREE)
00700 (COMMENT HERE WE MIGHT INITIALIZE THIS PARSE'S LIST OF RULES
00800 **USED)
00900 (SETQ ARG1 (SOME:PART:OF:14 ARG1))
01000 (COMMENT PERHAPS A LOOP GOES HERE, ENCLOSING (COMMENT SOME JO
01100 **INED FORWARD/BACKWARD PARSE CALLS)))))
01200
01300 GC: 8
01400 24721, 24721 FREE WORDS
01500 (PARSE:15 redefined)
01600
01700 MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
01800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
01900 **N:(DO WE PARSE BOTH FORWARDS AND BACKWARDS)
02000 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
02100 SHOULD I DISCUSS RAMIFICATIONS?NO
02200
02300 NOW TYPE YOUR ANSWER: YES
02400
02500
02600 TYPE A DIGIT, AS FOLLOWS:
02700 1 FORWARD. IF THIS FAILS, THEN TRY BACKWARD.
02800 2 BACKWARD. IF THIS FAILS, THEN TRY FORWARD.
02900 3 SIMULTANEOUSLY, TRY BOTH UNTIL ONE SUCCEEDS OR BOTH FAIL.
03000
03100 USER: 1
03200 (COMMENT WE LOOK OVER THE PARSE:15 CODE AGAIN.)
03300
03400 OK, READY TO MOVE ON NOW.
03500
03600 MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
03700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
03800 **N:(DO WE PARSE TO/FROM ALL LEGAL STRINGS,
03900 RATHER THAN SIMPLY FROM 'S')SINCE THE DECISION IS BOOLEAN, JUST ANSWER Y
04000 **ES OR NO.
04100 SHOULD I DISCUSS RAMIFICATIONS?NO
04200
04300 NOW TYPE YOUR ANSWER: YES
04400
04500 IS SET:OF:LEGAL:STRINGS PROBABLY GOING TO EXIST? YES
04600 (COMMENT WE LOOK OVER THE NEW PARSE:15 CODE)
04700
04800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
04900 I DON'T KNOW ANY NAMES FOR (VECTOR FOREACH), SO YOU'LL HAVE TO
05000 TYPE A BRAND NEW NAME IN TO ME.
05100 USER: NIL
05200
05300 THE NAME CHOSEN IS FOREACH:16
05400
05500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:FORWARD)
05600 I DON'T KNOW ANY NAMES FOR (VECTOR PARSE:FORWARD), SO YOU'LL HAVE TO
05700 TYPE A BRAND NEW NAME IN TO ME.
05800 USER: NIL
05900
06000 THE NAME CHOSEN IS PARSE:FORWARD:17
06100
06200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:BACKWARD)
06300 I DON'T KNOW ANY NAMES FOR (VECTOR PARSE:BACKWARD), SO YOU'LL HAVE TO
06400 TYPE A BRAND NEW NAME IN TO ME.
06500 USER: NIL
06600
06700 THE NAME CHOSEN IS PARSE:BACKWARD:18
06800
06900 OK, READY TO MOVE ON NOW.
07000
07100 GC: 30
07200 389, 389 FREE WORDS
07300
07400 MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
07500 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
07600 **N:(DO WE INITIALIZE AND MAINTAIN A LIST OF
07700 THE RULES USED DURING THE PARSE?)SINCE THE DECISION IS BOOLEAN, JUST ANS
07800 **WER YES OR NO.
07900 SHOULD I DISCUSS RAMIFICATIONS?NO
08000
08100 NOW TYPE YOUR ANSWER: YES
08200
08300 OK, READY TO MOVE ON NOW.
08400
08500 MOVE CURSOR TO (VECTOR PARSE:15 TYPE OF (VECTOR PARSE))
08600 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
08700 **N:(DO WE INITIALIZE AND MAINTAIN A PARSE TREE?)
08800 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
08900 SHOULD I DISCUSS RAMIFICATIONS?NO
09000
09100 NOW TYPE YOUR ANSWER: YES
09200
09300 OK, READY TO MOVE ON NOW.
09400 (COMMENT S1 IS NOT A BEING YET)
09500 (COMMENT SET:OF:LEGAL:STRINGS IS NOT A BEING YET)
09600
09700 MOVE CURSOR TO (VECTOR FOREACH:16 TYPE OF (VECTOR FOREACH))
09800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
09900 **N:(I ASSUME THAT I STOP AFTER EXAMINING ALL
10000 POSSIBLE:NAMES:OF:CLASS IN SET:OF:POSSIBLE:NAMES:OF:CLASS ; DO I ALSO ST
10100 **OP AFTER SOME CONDITION 'C' BECOMES TRUE?)
10200 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
10300 SHOULD I DISCUSS RAMIFICATIONS?NO
10400
10500 NOW TYPE YOUR ANSWER: YES
10600
10700 PLEASE TYPE IN A PREDICATE EQUIVALENT TO THIS UNTIL CONDITION 'C'.
10800 USER: (TYPING IN ] WILL MEAN THAT THE CONDITION IS THATRESULT:1
10900 IS NONNULL.) USER: NIL
11000
11100 OK, READY TO MOVE ON NOW.
11200
11300 MOVE CURSOR TO FOREACH:16
11400
11500
11600 PUP IS NOW GOING TO ENCODE THE PIECE
11700 (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
11800 (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:ST
11900 **RINGS)
12000 (COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (CO
12100 **MMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL)
12200 (COMME
12300 **NT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
12400 (PROG (RESULT:1)
12500 (SETQ EVAL:ARG3 (EVAL ARG3))
12600 LABEL:2
12700 (COND ((NULL EVAL:ARG3)
12800 (SET ARG1 FAILURE:VALUE)
12900 (RETURN EXHAUSTION:VALUE)))
13000 (SET ARG1 (CAR EVAL:ARG3))
13100 (SETQ EVAL:ARG3 (CDR EVAL:ARG3))
13200 (SETQ RESULT:1 (EVAL ARG5))
13300 (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE))
13400 (T (GO LABEL:2)))
13500 (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL
13600 ** CONDITION VALUE WAS LEFT UNDEFINED)))
13700
13800
13900 OF THE FUNCTION FOREACH:16 INTO LISP. FUNCTION NAMES WILL
14000 BE QUERIED IN PREORDER, AS NEEDED.
14100
14200
14300 DRAW A LINE FROM THE FUNCTION CALL (FOREACH:16 S1 IN SET:OF:LEGAL:STRIN
14400 **GS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:18 S
14500 **1 ARG1 BPARSE:LEVEL))) OF THE FUNCTION FOREACH:16 TO THIS NEW PIECE OF
14600 ** CODE, WHICH IS ITS BODY:
14700
14800 (FOREACH:16
14900 (NLAMBDA (ARG1 DUMMY:ARGUMENT:2 ARG3 DUMMY:ARGUMENT:1 ARG5)
15000 (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:
15100 **STRINGS)
15200 (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
15300 (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:
15400 **STRINGS)
15500 (COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (
15600 **COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL)
15700 (
15800 **COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL))
15900 )
16000 (PROG (RESULT:1)
16100 (SETQ EVAL:ARG3 (EVAL ARG3))
16200 LABEL:2
16300 (COND
16400 ((NULL EVAL:ARG3)
16500 (SET ARG1 FAILURE:VALUE)
16600 (RETURN EXHAUSTION:VALUE)))
16700 (SET ARG1 (CAR EVAL:ARG3))
16800 (SETQ EVAL:ARG3 (CDR EVAL:ARG3))
16900 (SETQ RESULT:1 (EVAL ARG5))
17000 (COND
17100 (RESULT:1 (RETURN UNTIL:CONDITION:VALUE))
17200 (T (GO LABEL:2)))
17300 (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNT
17400 **IL CONDITION VALUE WAS LEFT UNDEFINED)))))
17500 (FOREACH:16 redefined)
17600
17700 GC: 8
17800 24871, 24871 FREE WORDS
17900 (COMMENT ARG1 IS NOT A BEING YET)
18000 (COMMENT FPARSE:LEVEL IS NOT A BEING YET)
18100
18200 MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
18300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
18400 **N:(THIS IS THE SKELETON FOR PARSING IN THIS
18500 DIRECTION)
18600 MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
18700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
18800 **N:(SHOULD WE IMPLEMENT ERROR RECOVERY IN ANY
18900 FANCY WAY)
19000 MOVE CURSOR TO PARSE:FORWARD:17
19100
19200
19300 PUP IS NOW GOING TO ENCODE THE PIECE
19400 (COND ((EQUAL ARG1 ARG2)
19500 T)
19600 ((ZEROP ARG3)
19700 NIL)
19800 (T (FOREACH R IN SET:OF:RULES DO (FOREACH AR IN (APPLYRULE R ARG
19900 **1)
20000 DO
20100 (PROG1 (PARSE:FORWARD
20200 **AR ARG2 (SUB1 ARG3))
20300 (COMMENT PARSE
20400 **TREE MAINTENANCE MIGHT GO HERE)
20500 (COMMENT RULES
20600 **USED MAINTENANCE MIGHT GO HERE))))))
20700
20800
20900 OF THE FUNCTION PARSE:FORWARD:17 INTO LISP. FUNCTION NAMES WILL
21000 BE QUERIED IN PREORDER, AS NEEDED.
21100
21200 GC: 8
21300 24610, 24610 FREE WORDS
21400
21500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
21600 IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
21700 **D?
21800
21900 USER: YES
22000
22100 SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
22200 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
22300 YOU WANT. AM I RIGHT?
22400 USER: YES
22500
22600 THE NAME CHOSEN IS FOREACH:16
22700
22800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
22900 IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
23000 **D?
23100
23200 USER: YES
23300
23400 SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
23500 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
23600 YOU WANT. AM I RIGHT?
23700 USER: YES
23800
23900 THE NAME CHOSEN IS FOREACH:16
24000
24100 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR APPLYRULE)
24200 I DON'T KNOW ANY NAMES FOR (VECTOR APPLYRULE), SO YOU'LL HAVE TO
24300 TYPE A BRAND NEW NAME IN TO ME.
24400 USER: NIL
24500
24600 THE NAME CHOSEN IS APPLYRULE:19
24700
24800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:FORWARD)
24900
25000 GC: 30
25100 376, 376 FREE WORDS
25200 IS THIS THE SAME AS A (VECTOR PARSE:FORWARD) WHICH WE'VE ALREADY SEEN AN
25300 **D NAMED?
25400
25500 USER: YES
25600
25700 SINCE PARSE:FORWARD:17 IS THE ONLY NAME FOR (VECTOR PARSE:FORWARD),
25800 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
25900 YOU WANT. AM I RIGHT?
26000 USER: YES
26100
26200 THE NAME CHOSEN IS PARSE:FORWARD:17
27700
27800 DRAW A LINE FROM THE FUNCTION CALL (PARSE:FORWARD:17 AR ARG2 (SUB1 ARG3
27900 **)) OF THE FUNCTION PARSE:FORWARD:17 TO THIS NEW PIECE OF CODE, WHICH I
28000 **S ITS BODY:
28100
28200 (PARSE:FORWARD:17
28300 (LAMBDA (ARG1 ARG2 ARG3)
28400 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR)
28500 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS NIL)
28600 (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3))
28700 (COND
28800 ((EQUAL ARG1 ARG2)
28900 T)
29000 ((ZEROP ARG3)
29100 NIL)
29200 (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:1
29300 **9 R ARG1)
29400 DO (PROG1 (PARSE:FORWARD:17
29500 ** AR ARG2 (SUB1 ARG3))
29600 (COMMENT PARSE TR
29700 **EE MAINTENANCE MIGHT GO HERE)
29800 (COMMENT RULES US
29900 **ED MAINTENANCE MIGHT GO HERE))))))))
30000 (PARSE:FORWARD:17 redefined)
30100
30200 MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
30300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
30400 **N:(IS THERE A LIST OF RULES USED TO MAINTAIN?)
30500 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
30600 SHOULD I DISCUSS RAMIFICATIONS?NO
30700
30800 NOW TYPE YOUR ANSWER:
30900 HA!! I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
31000 (COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:FORWARD:17)
31100
31200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
31300 I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:INSERTION), SO YOU'LL HAV
31400 **E TO
31500 TYPE A BRAND NEW NAME IN TO ME.
31600 USER: NIL
31700
31800 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
31900
32000 OK, READY TO MOVE ON NOW.
32100
32200 MOVE CURSOR TO (VECTOR PARSE:FORWARD:17 TYPE OF (VECTOR PARSE:FORWARD))
32300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
32400 **N:(IS THERE A PARSE TREE TO MAINTAIN?)
32500 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
32600 SHOULD I DISCUSS RAMIFICATIONS?NO
32700
32800 NOW TYPE YOUR ANSWER:
32900 HA!! I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
33000 (COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:FORWARD:17)
33100
33200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
33300 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
33400 ** SEEN AND NAMED?
33500
33600 USER: YES
33700
33800 SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
33900 **INSERTION),
34000 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
34100 YOU WANT. AM I RIGHT?
34200 USER: YES
34300
34400 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
34500
34600 OK, READY TO MOVE ON NOW.
34700 (COMMENT R IS NOT A BEING YET)
34800
34900 GC: 8
35000 24086, 24086 FREE WORDS
35100
35200 DEBUG F1 FDESC UNKNOWN (VECTOR PROGN ARG1 (VECTOR COMMENT THIS APPEARAN
35300 **CE OF ARG1 IS SIMPLY TO ENSURE THAT A COMMENT ABOUT ITS BINDING GETS S
35400 **TUCK IN HERE SOMEWHERE IN THE META:CODE) (VECTOR ALLSUBSTS (VECTOR COP
35500 **Y (VECTOR EVAL (VECTOR GETP RULE RIGHT:SIDE))) (VECTOR COPY (VECTOR EV
35600 **AL (VECTOR GETP RULE LEFT:SIDE))) (VECTOR COPY ARG2)))
35700
35800 MOVE CURSOR TO APPLYRULE:19
35900
36000
36100 PUP IS NOW GOING TO ENCODE THE PIECE
36200 (PROGN ARG1
36300 (COMMENT THIS APPEARANCE OF ARG1 IS SIMPLY TO ENSURE THAT A COM
36400 **MENT ABOUT ITS BINDING GETS STUCK IN HERE
36500 SOMEWHERE IN THE META:CODE)
36600 (ALLSUBSTS (COPY (EVAL (GETP RULE RIGHT:SIDE)))
36700 (COPY (EVAL (GETP RULE LEFT:SIDE)))
36800 (COPY ARG2)))
36900
37000
37100 OF THE FUNCTION APPLYRULE:19 INTO LISP. FUNCTION NAMES WILL
37200 BE QUERIED IN PREORDER, AS NEEDED.
37300
37400
37500 DRAW A LINE FROM THE FUNCTION CALL (APPLYRULE:19 R ARG1) OF THE FUNCTIO
37600 **N APPLYRULE:19 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
37700
37800 (APPLYRULE:19
37900 (LAMBDA (ARG1 ARG2)
38000 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS R)
38100 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS NIL)
38200 (PROGN ARG1
38300 (COMMENT THIS APPEARANCE OF ARG1 IS SIMPLY TO ENSURE THAT A C
38400 **OMMENT ABOUT ITS BINDING GETS STUCK
38500 IN HERE SOMEWHERE IN THE META:CODE)
38600 (ALLSUBSTS (COPY (EVAL (GETP RULE RIGHT:SIDE)))
38700 (COPY (EVAL (GETP RULE LEFT:SIDE)))
38800 (COPY ARG2)))))
38900 (APPLYRULE:19 redefined)
39000 (COMMENT BPARSE:LEVEL IS NOT A BEING YET)
39100
39200 MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
39300 **)
39400 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
39500 **N:(THIS IS THE SKELETON FOR PARSING IN THIS
39600 DIRECTION)
39700 GC: 30
39800 389, 389 FREE WORDS
39900
40000 MOVE CURSOR TO PARSE:BACKWARD:18
40100
40200
40300 PUP IS NOW GOING TO ENCODE THE PIECE
40400 (COND ((EQUAL ARG1 ARG2)
40500 T)
40600 ((ZEROP ARG3)
40700 NIL)
40800 (T (FOREACH R IN SET:OF:RULES DO (FOREACH AR IN (APPLYRULE (ANTI
40900 **RULE R)
41000 ARG2)
41100 DO
41200 (PROG1 (PARSE:BACKWARD
41300 ** ARG1 AR (SUB1 ARG3))
41400 (COMMENT PARSE
41500 **TREE MAINTENANCE MIGHT GO HERE)
41600 (COMMENT RULES
41700 **USED MAINTENANCE MIGHT GO HERE))))))
41800
41900
42000 OF THE FUNCTION PARSE:BACKWARD:18 INTO LISP. FUNCTION NAMES WILL
42100 BE QUERIED IN PREORDER, AS NEEDED.
42200
42300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
42400 IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
42500 **D?
42600
42700 USER: YES
42800
42900 SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
43000 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
43100 YOU WANT. AM I RIGHT?
43200 USER: YES
43300
43400 THE NAME CHOSEN IS FOREACH:16
43500
43600 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR FOREACH)
43700 IS THIS THE SAME AS A (VECTOR FOREACH) WHICH WE'VE ALREADY SEEN AND NAME
43800 **D?
43900
44000 USER: YES
44100
44200 SINCE FOREACH:16 IS THE ONLY NAME FOR (VECTOR FOREACH),
44300 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
44400 YOU WANT. AM I RIGHT?
44500 USER: YES
44600
44700 THE NAME CHOSEN IS FOREACH:16
44800
44900 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR APPLYRULE)
45000 IS THIS THE SAME AS A (VECTOR APPLYRULE) WHICH WE'VE ALREADY SEEN AND NA
45100 **MED?
45200
45300 USER: YES
45400
45500 SINCE APPLYRULE:19 IS THE ONLY NAME FOR (VECTOR APPLYRULE),
45600 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
45700 YOU WANT. AM I RIGHT?
45800 USER: YES
45900
46000 THE NAME CHOSEN IS APPLYRULE:19
46100
46200 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE:BACKWARD)
46300 IS THIS THE SAME AS A (VECTOR PARSE:BACKWARD) WHICH WE'VE ALREADY SEEN A
46400 **ND NAMED?
46500
46600 USER: YES
46700
46800 SINCE PARSE:BACKWARD:18 IS THE ONLY NAME FOR (VECTOR PARSE:BACKWARD),
46900 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
47000 YOU WANT. AM I RIGHT?
47100 USER: YES
47200
47300 THE NAME CHOSEN IS PARSE:BACKWARD:18
47400
47500 GC: 8
47600 23309, 23309 FREE WORDS
47700
47800
47900 DRAW A LINE FROM THE FUNCTION CALL (PARSE:BACKWARD:18 ARG1 AR (SUB1 ARG
48000 **3)) OF THE FUNCTION PARSE:BACKWARD:18 TO THIS NEW PIECE OF CODE, WHICH
48100 ** IS ITS BODY:
48200
48300 (PARSE:BACKWARD:18
48400 (LAMBDA (ARG1 ARG2 ARG3)
48500 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL)
48600 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS AR)
48700 (COMMENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3))
48800 (COND
48900 ((EQUAL ARG1 ARG2)
49000 T)
49100 ((ZEROP ARG3)
49200 NIL)
49300 (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:1
49400 **9 (ANTIRULE R)
49500
49600 ** ARG2)
49700 DO (PROG1 (PARSE:BACKWARD:1
49800 **8 ARG1 AR (SUB1 ARG3))
49900 (COMMENT PARSE TR
50000 **EE MAINTENANCE MIGHT GO HERE)
50100 (COMMENT RULES US
50200 **ED MAINTENANCE MIGHT GO HERE))))))))
50300 (PARSE:BACKWARD:18 redefined)
50400
50500 MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
50600 **)
50700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
50800 **N:(IS THERE A LIST OF RULES USED TO MAINTAIN?)
50900 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
51000 SHOULD I DISCUSS RAMIFICATIONS?NO
51100
51200 NOW TYPE YOUR ANSWER:
51300 HA!! I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
51400 (COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:BACKWARD:18)
51500
51600 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
51700 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
51800 ** SEEN AND NAMED?
51900
52000 USER: YES
52100
52200 SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
52300 **INSERTION),
52400 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
52500 YOU WANT. AM I RIGHT?
52600 USER: YES
52700
52800 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
52900
53000 OK, READY TO MOVE ON NOW.
53100
53200 GC: 30
53400 388, 388 FREE WORDS
56200
56300 (0:19:12 CPU TIME)
56400 (0:0:0 OF IT IN DWIM)
58300
58400 MOVE CURSOR TO (VECTOR PARSE:BACKWARD:18 TYPE OF (VECTOR PARSE:BACKWARD)
58500 **)
58600 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
58700 **N:(IS THERE A PARSE TREE TO MAINTAIN?)
58800 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
58900 SHOULD I DISCUSS RAMIFICATIONS?NO
59000
59100 NOW TYPE YOUR ANSWER:
59200 HA!! I HAVE A HINT WHICH RESOLVES THIS FOR ME!!
59300 (COMMENT WE ARE AGAIN LOOKING AT THE CODE FOR PARSE:BACKWARD:18)
59400
59500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
59600 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
59700 ** SEEN AND NAMED?
59800
59900 USER: YES
60000
60100 SINCE CONDITIONAL:INSERTION:20 IS THE ONLY NAME FOR (VECTOR CONDITIONAL:
60200 **INSERTION),
60300 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
60400 YOU WANT. AM I RIGHT?
60500 USER: YES
60600
60700 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
60800
60900 OK, READY TO MOVE ON NOW.
61000
61100 MOVE CURSOR TO (VECTOR CONDITIONAL:INSERTION:20 TYPE OF (VECTOR CONDITIO
61200 **NAL:INSERTION))
61300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
61400 **N:(DO I, AT THIS POINT, CONDITIONALLY INSERT
61500 (ANTIRULE R) ,OR A SIMILAR ELEMENT, SUCH AS ARG1 INTO THE DATA STRUCTURE
61600 ** (EVAL ARG2) ??? PLEASE RESPOND YES OR NO;
61700 IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME MORE QUESTIO
61800 **NS.)
61900 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
62000 SHOULD I DISCUSS RAMIFICATIONS?NO
62100
62200 NOW TYPE YOUR ANSWER: YES
62300
62400
62500 NOW WE MUST KNOW 2 THINGS:
62600 (1) WHAT WE INSERT
62700 (2) UNDER WHAT CONDITION WE DO THE INSERTION
62800
62900 NOTES ABOUT (1): IF WE ARE INSERTING AN ALREADY EXISTING THING, THEN
63000 JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE
63100 GET IT, PERHAPS IN TERMS OF ARG1.
63200
63300 (RECALL THAT HERE, ARG1 IS INSTANTIATED AS (ANTIRULE R))
63400
63500
63600 NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:2
63700 . THIS WILL BE ESPECIALLY USEFUL IF (1) IS NOT SIMPLY
63800 AN OLD NAME. ALSO, WE DO NOT ASSUME THAT PART OF THE
63900 CONDITION (2) IS THE FACT THAT RESULT:2
64000
64100 IS ALREADY IN THE LIST. THIS NEEDNT BE
64200 RESTATED. TYPNG SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CON-
64300 DITION: (RESULT:2 ISNT NIL)
64400
64500
64600 USER: (1) : ARG1
64700
64800 USER: (2): NIL
64900
65000 OK, READY TO MOVE ON NOW.
65100
65200 MOVE CURSOR TO CONDITIONAL:INSERTION:20
65300
65400
65500 PUP IS NOW GOING TO ENCODE THE PIECE
65600 (PROGN (SETQ RESULT:2 ARG1)
65700 NIL
65800 (COND ((AND (NOT (MEMBER RESULT:2 (EVAL ARG2)))
65900 RESULT:2)
66000 (SET ARG2 (SETUNION (EVAL ARG2)
66100 (LIST ARG1))))
66200 (T (SETQ RESULT:2 NIL))))
66300
66400
66500 OF THE FUNCTION CONDITIONAL:INSERTION:20 INTO LISP. FUNCTION NAMES WIL
66600 **L
66700 BE QUERIED IN PREORDER, AS NEEDED.
66800
66900
67000 DRAW A LINE FROM THE FUNCTION CALL (CONDITIONAL:INSERTION:20 (ANTIRULE
67100 **R) (QUOTE RULES:USED)) OF THE FUNCTION CONDITIONAL:INSERTION:20 TO THI
67200 **S NEW PIECE OF CODE, WHICH IS ITS BODY:
67300
67400 (CONDITIONAL:INSERTION:20
67500 (LAMBDA (ARG1 ARG2)
67600 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (ANTIRULE R))
67700 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE RULES:
67800 **USED))
67900 (PROGN (SETQ RESULT:2 ARG1)
68000 NIL
68100 (COND
68200 ((AND (NOT (MEMBER RESULT:2 (EVAL ARG2)))
68300 RESULT:2)
68400 (SET ARG2 (SETUNION (EVAL ARG2)
68500 (LIST ARG1))))
68600 (T (SETQ RESULT:2 NIL))))))
68700 (CONDITIONAL:INSERTION:20 redefined)
68800
68900 GC: 8
69000 22126, 22126 FREE WORDS
69100
69200 MOVE CURSOR TO (VECTOR LEGAL:ILLEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MA
69300 **JOR:MODIFY:STRUCTURE))
69400 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
69500 **ON:(MODIFY:STRUCTURE MODIFY:UNTIL MODIFY:SOME
69600 EXAMINE:STRUCTURE)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUBS
69700 **ET OF:
69800 (A .... MODIFY:STRUCTURE)
69900 (B .... MODIFY:UNTIL)
70000 (C .... MODIFY:SOME)
70100 (D .... EXAMINE:STRUCTURE)
70200
70300 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
70400 SHOULD I DISCUSS RAMIFICATIONS?NO
70500
70600 USER: (A C)
70700
70800 MOVE CURSOR TO LEGAL:ILLEGAL:MODIFY:STRUCTURE
70900
71000
71100 PUP IS NOW GOING TO ENCODE THE PIECE
71200 (PROGN (MODIFY:STRUCTURE ARG1 ARG2)
71300 (MODIFY:SOME ARG1 ARG2))
71400
71500
71600 OF THE FUNCTION LEGAL:ILLEGAL:MODIFY:STRUCTURE INTO LISP. FUNCTION NAM
71700 **ES WILL
71800 BE QUERIED IN PREORDER, AS NEEDED.
71900
72000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
72100 I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
72200 TYPE A BRAND NEW NAME IN TO ME.
72300 USER: NIL
72400
72500 THE NAME CHOSEN IS MODIFY:STRUCTURE:21
72600
72700 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:SOME)
72800 I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:SOME), SO YOU'LL HAVE TO
72900 TYPE A BRAND NEW NAME IN TO ME.
73000 USER: NIL
73100
73200 THE NAME CHOSEN IS MODIFY:SOME:22
73300
73400
73500 DRAW A LINE FROM THE FUNCTION CALL (LEGAL:ILLEGAL:MODIFY:STRUCTURE (VEC
73600 **TOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION
73700 **LEGAL:ILLEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS
73800 ** BODY:
73900
74000 (LEGAL:ILLEGAL:MODIFY:STRUCTURE
74100 (LAMBDA (ARG1 ARG2)
74200 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
74300 ** SOME:PART:OF:14 ARG2))
74400 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
74500 **:RULES))
74600 (PROGN (MODIFY:STRUCTURE:21 ARG1 ARG2)
74700 (MODIFY:SOME:22 ARG1 ARG2))))
74800 (LEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
74900 (COMMENT ARG2 IS NOT A BEING YET)
75000
75100 MOVE CURSOR TO (VECTOR MODIFY:SOME:22 TYPE OF (VECTOR MODIFY:SOME))
75200 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
75300 **N:(WE GATHER UP ALL RELEVANT SUBSTRUCTURES
75400 AND THEN MODIFY THEM)
75500 MOVE CURSOR TO MODIFY:SOME:22
75600
75700
75800 PUP IS NOW GOING TO ENCODE THE PIECE
75900 (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS)
76000 (COND ((MODIFY:CONDITION ILS)
76100 (MODIFY:STRUCTURE ARG1 ARG2)
76200 **)))))
76300
76400
76500 OF THE FUNCTION MODIFY:SOME:22 INTO LISP. FUNCTION NAMES WILL
76600 BE QUERIED IN PREORDER, AS NEEDED.
76700
76800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
76900
77000 GC: 30
77100 385, 385 FREE WORDS
77200 IS THIS THE SAME AS A (VECTOR MODIFY:STRUCTURE) WHICH WE'VE ALREADY SEEN
77300 ** AND NAMED?
77400
77500 USER: NO
77600 I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
77700 TYPE A BRAND NEW NAME IN TO ME.
77800 USER: NIL
77900
78000 THE NAME CHOSEN IS MODIFY:STRUCTURE:23
78100
78200
78300 DRAW A LINE FROM THE FUNCTION CALL (MODIFY:SOME:22 ARG1 ARG2) OF THE FU
78400 **NCTION MODIFY:SOME:22 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
78500
78600 (MODIFY:SOME:22
78700 (LAMBDA (ARG1 ARG2)
78800 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
78900 ** SOME:PART:OF:14 ARG2))
79000 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
79100 **:RULES))
79200 (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS)
79300 (COND
79400 ((MODIFY:CONDITION ILS)
79500 (MODIFY:STRUCTURE:23 ARG1 ARG2))))))))
79600 (MODIFY:SOME:22 redefined)
79700
79800 MOVE CURSOR TO (VECTOR ILLEGAL:LEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MA
79900 **JOR:MODIFY:STRUCTURE))
80000 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
80100 **ON:(MODIFY:STRUCTURE MODIFY:UNTIL MODIFY:SOME
80200 EXAMINE:STRUCTURE)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUBS
80300 **ET OF:
80400 (A .... MODIFY:STRUCTURE)
80500 (B .... MODIFY:UNTIL)
80600 (C .... MODIFY:SOME)
80700 (D .... EXAMINE:STRUCTURE)
80800
80900 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
81000 SHOULD I DISCUSS RAMIFICATIONS?NO
81100
81200 USER: (B)
81300
81400 MOVE CURSOR TO ILLEGAL:LEGAL:MODIFY:STRUCTURE
81500
81600
81700 PUP IS NOW GOING TO ENCODE THE PIECE
81800 (PROGN (MODIFY:UNTIL ARG1 ARG2))
81900
82000
82100 OF THE FUNCTION ILLEGAL:LEGAL:MODIFY:STRUCTURE INTO LISP. FUNCTION NAM
82200 **ES WILL
82300 BE QUERIED IN PREORDER, AS NEEDED.
82400
82500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:UNTIL)
82600 I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:UNTIL), SO YOU'LL HAVE TO
82700 TYPE A BRAND NEW NAME IN TO ME.
82800 USER: NIL
82900
83000 THE NAME CHOSEN IS MODIFY:UNTIL:24
83100
83200
83300 DRAW A LINE FROM THE FUNCTION CALL (ILLEGAL:LEGAL:MODIFY:STRUCTURE (VEC
83400 **TOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION
83500 **ILLEGAL:LEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS
83600 ** BODY:
83700
83800 (ILLEGAL:LEGAL:MODIFY:STRUCTURE
83900 (LAMBDA (ARG1 ARG2)
84000 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
84100 ** SOME:PART:OF:14 ARG2))
84200 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
84300 **:RULES))
84400 (PROGN (MODIFY:UNTIL:24 ARG1 ARG2))))
84500 (ILLEGAL:LEGAL:MODIFY:STRUCTURE redefined)
84600
84700 GC: 8
84800 21159, 21159 FREE WORDS
84900
85000 MOVE CURSOR TO (VECTOR MODIFY:UNTIL:24 TYPE OF (VECTOR MODIFY:UNTIL))
85100 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
85200 **N:(WE REPEATEDLY MODIFY STRUCTURE)
85300
85400 MOVE CURSOR TO MODIFY:UNTIL:24
85500
85600
85700 PUP IS NOW GOING TO ENCODE THE PIECE
85800 (REPEATEDLY (MODIFY:STRUCTURE ARG1 ARG2))
85900
86000
86100 OF THE FUNCTION MODIFY:UNTIL:24 INTO LISP. FUNCTION NAMES WILL
86200 BE QUERIED IN PREORDER, AS NEEDED.
86300
86400 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR MODIFY:STRUCTURE)
86500 IS THIS THE SAME AS A (VECTOR MODIFY:STRUCTURE) WHICH WE'VE ALREADY SEEN
86600 ** AND NAMED?
86700
86800 USER: NO
86900 I DON'T KNOW ANY NAMES FOR (VECTOR MODIFY:STRUCTURE), SO YOU'LL HAVE TO
87000 TYPE A BRAND NEW NAME IN TO ME.
87100 USER: NIL
87200
87300 THE NAME CHOSEN IS MODIFY:STRUCTURE:25
87400
87500
87600 DRAW A LINE FROM THE FUNCTION CALL (MODIFY:UNTIL:24 ARG1 ARG2) OF THE F
87700 **UNCTION MODIFY:UNTIL:24 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
87800
87900 (MODIFY:UNTIL:24
88000 (LAMBDA (ARG1 ARG2)
88100 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
88200 ** SOME:PART:OF:14 ARG2))
88300 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
88400 **:RULES))
88500 (PROG NIL
88600 LABEL:3
88700 (MODIFY:STRUCTURE:25 ARG1 ARG2)
88800 (GO LABEL:3)
88900 (COMMENT INFINITE LOOP IN THIS PROG))))
89000 (MODIFY:UNTIL:24 redefined)
89100
89200 GC: 8
89300 20824, 20824 FREE WORDS
89400
89500 MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:21 TYPE OF (VECTOR MODIFY:STRUCT
89600 **URE))
89700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
89800 **ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
89900 COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
90000 **SET OF:
90100 (A .... CONDITIONAL:INSERTION)
90200 (B .... CONDITIONAL:DELETION)
90300 (C .... COMPLEX:ALTERATION)
90400
90500 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
90600 SHOULD I DISCUSS RAMIFICATIONS?NO
90700
90800 USER: (A)
90900
91000 MOVE CURSOR TO MODIFY:STRUCTURE:21
91100
91200
91300 PUP IS NOW GOING TO ENCODE THE PIECE
91400 (PROGN (CONDITIONAL:INSERTION ARG1 ARG2))
91500
91600
91700 OF THE FUNCTION MODIFY:STRUCTURE:21 INTO LISP. FUNCTION NAMES WILL
91800 BE QUERIED IN PREORDER, AS NEEDED.
91900
92000 GC: 28
92100 302, 302 FREE WORDS
92200
92300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
92400 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
92500 ** SEEN AND NAMED?
92600
92700 USER: NO
92800 I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:INSERTION), SO YOU'LL HAV
92900 **E TO
93000 TYPE A BRAND NEW NAME IN TO ME.
93100 USER: NIL
93200
93300 THE NAME CHOSEN IS CONDITIONAL:INSERTION:26
93400
93500 GC: 30
93600 389, 389 FREE WORDS
93700
93800
93900 DRAW A LINE FROM THE FUNCTION CALL (MODIFY:STRUCTURE:21 ARG1 ARG2) OF T
94000 **HE FUNCTION MODIFY:STRUCTURE:21 TO THIS NEW PIECE OF CODE, WHICH IS IT
94100 **S BODY:
94200
94300 (MODIFY:STRUCTURE:21
94400 (LAMBDA (ARG1 ARG2)
94500 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
94600 ** SOME:PART:OF:14 ARG2))
94700 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
94800 **:RULES))
94900 (PROGN (CONDITIONAL:INSERTION:26 ARG1 ARG2))))
95000 (MODIFY:STRUCTURE:21 redefined)
95100
95200 MOVE CURSOR TO (VECTOR CONDITIONAL:INSERTION:26 TYPE OF (VECTOR CONDITIO
95300 **NAL:INSERTION))
95400 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
95500 **N:(DO I, AT THIS POINT, CONDITIONALLY INSERT
95600 (VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, SUCH AS ARG1
95700 **INTO THE DATA STRUCTURE (EVAL ARG2) ??? PLEASE
95800 RESPOND YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YO
95900 **U SOME MORE QUESTIONS.)
96000 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
96100 SHOULD I DISCUSS RAMIFICATIONS?NO
96200
96300 NOW TYPE YOUR ANSWER: YES
96400
96500
96600 NOW WE MUST KNOW 2 THINGS:
96700 (1) WHAT WE INSERT
96800 (2) UNDER WHAT CONDITION WE DO THE INSERTION
96900
97000 NOTES ABOUT (1): IF WE ARE INSERTING AN ALREADY EXISTING THING, THEN
97100 JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE
97200 GET IT, PERHAPS IN TERMS OF ARG1.
97300
97400 (RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
97500 ** ARG2))
97600
97700
97800 NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:3
97900 . THIS WILL BE ESPECIALLY USEFUL IF (1) IS NOT SIMPLY
98000 AN OLD NAME. ALSO, WE DO NOT ASSUME THAT PART OF THE
98100 CONDITION (2) IS THE FACT THAT RESULT:3
98200
98300 IS ALREADY IN THE LIST. THIS NEEDNT BE
98400 RESTATED. TYPNG SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CON-
98500 DITION: (RESULT:3 ISNT NIL)
98600
98700
98800 USER: (1) : (THOSE LEGAL STRINGS WHICH MATCH ARG1)
98900
99000 USER: (2): NIL
99100
99200 OK, READY TO MOVE ON NOW.
99300
99400 MOVE CURSOR TO CONDITIONAL:INSERTION:26
99500
99600
99700 PUP IS NOW GOING TO ENCODE THE PIECE
99800 (PROGN (SETQ RESULT:3 (MAPCONC SET:OF:LEGAL:STRINGS (FUNCTION (LAMBDA
99900 **(LS)
00100
00200 **(COND ((PATTERN:MATCH ARG1 LS)))))))
00300 NIL
00400 (COND ((AND (NOT (MEMBER RESULT:3 (EVAL ARG2)))
00500 RESULT:3)
00600 (SET ARG2 (SETUNION (EVAL ARG2)
00700 RESULT:3)))
00800 (T (SETQ RESULT:3 NIL))))
00900
01000
01100 OF THE FUNCTION CONDITIONAL:INSERTION:26 INTO LISP. FUNCTION NAMES WIL
01200 **L
01300 BE QUERIED IN PREORDER, AS NEEDED.
01400
01500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PATTERN:MATCH)
01600 I DON'T KNOW ANY NAMES FOR (VECTOR PATTERN:MATCH), SO YOU'LL HAVE TO
01700 TYPE A BRAND NEW NAME IN TO ME.
01800 USER: NIL
01900
02000 THE NAME CHOSEN IS PATTERN:MATCH:27
02100
02200 GC: 8
02300 20174, 20174 FREE WORDS
02400
02500
02600 DRAW A LINE FROM THE FUNCTION CALL (CONDITIONAL:INSERTION:26 ARG1 ARG2)
02700 ** OF THE FUNCTION CONDITIONAL:INSERTION:26 TO THIS NEW PIECE OF CODE, W
02800 **HICH IS ITS BODY:
02900
03000 (CONDITIONAL:INSERTION:26
03100 (LAMBDA (ARG1 ARG2)
03200 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
03300 ** SOME:PART:OF:14 ARG2))
03400 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
03500 **:RULES))
03600 (PROGN (SETQ RESULT:3 (MAPCONC SET:OF:LEGAL:STRINGS (FUNCTION (LAMBD
03700 **A (LS)
03800 (COND
03900 ((PATTERN:MATCH:27 ARG1 LS)))))
04000 **))
04100 NIL
04200 (COND
04300 ((AND (NOT (MEMBER RESULT:3 (EVAL ARG2)))
04400 RESULT:3)
04500 (SET ARG2 (SETUNION (EVAL ARG2)
04600 RESULT:3)))
04700 (T (SETQ RESULT:3 NIL))))))
04800 (CONDITIONAL:INSERTION:26 redefined)
04900 (COMMENT LS IS NOT A BEING YET)
05000
05100 GC: 8
05200 19888, 19888 FREE WORDS
05300
05400 MOVE CURSOR TO (VECTOR PATTERN:MATCH:27 TYPE OF (VECTOR PATTERN:MATCH))
05500 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
05600 **N:(SET UP THE SKELETON OF THE MATCH)
05700
05800 MOVE CURSOR TO PATTERN:MATCH:27
05900
06000
06100 PUP IS NOW GOING TO ENCODE THE PIECE
06200 (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1)
06300 (QUOTE ARG2))
06400 (ELIM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1)
06500 (QUOTE ARG2))
06600 (COND ((IS:OF:TYPE ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO
06700 **AS PLAUSIBLE NEW RULE))
06800 (LIST (LIST ARG1 ARG2)
06900 (LIST ARG2 ARG1)))))
07000
07100
07200 OF THE FUNCTION PATTERN:MATCH:27 INTO LISP. FUNCTION NAMES WILL
07300 BE QUERIED IN PREORDER, AS NEEDED.
07400
07500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
07600 IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
07700 **AMED?
07800
07900 USER: NO
08000 I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
08100 TYPE A BRAND NEW NAME IN TO ME.
08200 USER: NIL
08300
08400 THE NAME CHOSEN IS IS:OF:TYPE:28
08500
08600
08700 DRAW A LINE FROM THE FUNCTION CALL (PATTERN:MATCH:27 ARG1 LS) OF THE FU
08800 **NCTION PATTERN:MATCH:27 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
08900
09000 (PATTERN:MATCH:27
09100 (LAMBDA (ARG1 ARG2)
09200 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
09300 ** SOME:PART:OF:14 ARG2))
09400 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS LS)
09500 (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1)
09600 (QUOTE ARG2))
09700 (ELIM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1)
09800 (QUOTE ARG2))
09900 (COND
10000 ((IS:OF:TYPE:28 ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO
10100 ** AS PLAUSIBLE NEW RULE))
10200 (LIST (LIST ARG1 ARG2)
10300 (LIST ARG2 ARG1)))))))
10400
10500 GC: 8
10600 19489, 19489 FREE WORDS
10700 (PATTERN:MATCH:27 redefined)
10800
10900 MOVE CURSOR TO (VECTOR PATTERN:MATCH:27 TYPE OF (VECTOR PATTERN:MATCH))
11000 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ONETYPE DECISIO
11100 **N:(PATCH UP THE BODY OF THE MATCHING FUNCTION
11200 HERE)
11300 GC: 8
11400 19144, 19144 FREE WORDS
11500
11600 MOVE CURSOR TO (VECTOR IS:OF:TYPE:28 TYPE OF (VECTOR IS:OF:TYPE))
11700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
11800 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
11900 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
12000 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
12100 TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
12200 TYPE IN THE DEFINITION OF IS:OF:TYPE:28
12300 GC: 30
12500 362, 362 FREE WORDS
13900
14000
14100 SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
14200 LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
14300 THE NIL TYPE, AND SHOULD BE FALSE IF IT ISNT OF
14400 THAT TYPE.
14500 PUPRIN1
14600
14700 SHOULD I DISCUSS RAMIFICATIONS?NO
14800
14900 USER: (ARG1 AND ARG2 AND THERE ARE LESS THAN 8 THINGS IN ARG1 , ARG2)
15000
15100 MOVE CURSOR TO (VECTOR IS:OF:TYPE:28 TYPE OF (VECTOR IS:OF:TYPE))
15200 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
15300 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
15400 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
15500 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
15600 TO IT)
15700 GC: 8
15800 19183, 19183 FREE WORDS
15900
16000 MOVE CURSOR TO IS:OF:TYPE:28
16100
16200
16300 PUP IS NOW GOING TO ENCODE THE PIECE
16400 (AND ARG1 ARG2 (LESSP (LENGTH (APPEND ARG1 ARG2))
16500 8))
16600
16700
16800 OF THE FUNCTION IS:OF:TYPE:28 INTO LISP. FUNCTION NAMES WILL
16900 BE QUERIED IN PREORDER, AS NEEDED.
17000
17100
17200 DRAW A LINE FROM THE FUNCTION CALL (IS:OF:TYPE:28 ARG1 ARG2 (COMMENT OK
17300 ** TO INCLUDE THIS COMBO AS PLAUSIBLE NEW RULE)) OF THE FUNCTION IS:OF:T
17400 **YPE:28 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
17500
17600 (IS:OF:TYPE:28
17700 (LAMBDA (ARG1 ARG2 DUMMY:ARGUMENT:1)
17800 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
17900 ** SOME:PART:OF:14 ARG2))
18000 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS LS)
18100 (AND ARG1 ARG2 (LESSP (LENGTH (APPEND ARG1 ARG2))
18200 8))))
18300
18400 IS (MATCH (TUPLE COMMENT FRAG1) ARG2) STILL THE PROPER EXPLICIT
18500 ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:28?
18600 USER: NO
18700
18800 WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
18900 USER: T
19000 (IS:OF:TYPE:28 redefined)
19100
19200 GC: 8
19300 18857, 18857 FREE WORDS
19400
19500 MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:23 TYPE OF (VECTOR MODIFY:STRUCT
19600 **URE))
19700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
19800 **ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
19900 COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
20000 **SET OF:
20100 (A .... CONDITIONAL:INSERTION)
20200 (B .... CONDITIONAL:DELETION)
20300 (C .... COMPLEX:ALTERATION)
20400
20500 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
20600 SHOULD I DISCUSS RAMIFICATIONS?NO
20700
20800 USER: (B)
20900
21000 MOVE CURSOR TO MODIFY:STRUCTURE:23
21100
21200
21300 PUP IS NOW GOING TO ENCODE THE PIECE
21400 (PROGN (CONDITIONAL:DELETION ARG1 ARG2))
21500
21600
21700 OF THE FUNCTION MODIFY:STRUCTURE:23 INTO LISP. FUNCTION NAMES WILL
21800 BE QUERIED IN PREORDER, AS NEEDED.
21900
22000 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:DELETION)
22100 I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:DELETION), SO YOU'LL HAVE
22200 ** TO
22300 TYPE A BRAND NEW NAME IN TO ME.
22400 USER: NIL
22500
22600 THE NAME CHOSEN IS CONDITIONAL:DELETION:29
22700
22800 GC: 8
22900 18793, 18793 FREE WORDS
23000
23100
23200 DRAW A LINE FROM THE FUNCTION CALL (MODIFY:STRUCTURE:23 ARG1 ARG2) OF T
23300 **HE FUNCTION MODIFY:STRUCTURE:23 TO THIS NEW PIECE OF CODE, WHICH IS IT
23400 **S BODY:
23500
23600 (MODIFY:STRUCTURE:23
23700 (LAMBDA (ARG1 ARG2)
23800 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
23900 ** SOME:PART:OF:14 ARG2))
24000 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
24100 **:RULES))
24200 (PROGN (CONDITIONAL:DELETION:29 ARG1 ARG2))))
24300 (MODIFY:STRUCTURE:23 redefined)
24400
24500 GC: 8
24600 18555, 18555 FREE WORDS
24700
24800 MOVE CURSOR TO (VECTOR CONDITIONAL:DELETION:29 TYPE OF (VECTOR CONDITION
24900 **AL:DELETION))
25000 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
25100 **N:(DO I, AT THIS POINT, CONDITIONALLY DELETE
25200 (VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, INTO THE DATA
25300 ** STRUCTURE (EVAL ARG2) ??? PLEASE RESPOND
25400 YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME M
25500 **ORE QUESTIONS.)
25600 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
25700 SHOULD I DISCUSS RAMIFICATIONS?NO
25800
25900 NOW TYPE YOUR ANSWER: YES
26000
26100
26200 NOW WE MUST KNOW 2 THINGS:
26300 (1) WHAT WE DELETE
26400 (2) UNDER WHAT CONDITION WE DO THE DELETION
26500
26600 NOTES ABOUT (1): IF WE ARE DELETING AN ALREADY EXISTING THING, THEN
26700 JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE
26800 GET IT, PERHAPS IN TERMS OF ARG1.
26900
27000 (RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
27100 ** ARG2))
27200
27300
27400 NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:4
27500 , IF (1) IS
27600 NOT SIMPLY AN OLD NAME.
27700 ALSO, WE ASSUME THAT PART OF THE CONDITION (2) IS THE FACT THAT RESULT:4
27800
27900 IS NOT ALREADY IN THE LIST. THIS NEED NOT BE
28000 RESTATED BY THE USER.
28100 TYPING SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CONDITION:
28200 (RESULT:4 ISNT NIL)
28300
28400
28500 USER: (1) : (RULES:USED WHICH IS IN RESULT:3)
28600
28700 USER: (2): NIL
28800
28900 OK, READY TO MOVE ON NOW.
29000
29100 MOVE CURSOR TO CONDITIONAL:DELETION:29
29200
29300
29400 PUP IS NOW GOING TO ENCODE THE PIECE
29500 (PROGN (SETQ RESULT:4 (SETINTERSECTION RULES:USED RESULT:3))
29600 (COND (RESULT:4 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
29700 RESULT:4)))
29800 (T (SETQ RESULT:4 NIL))))
29900
30000
30100 OF THE FUNCTION CONDITIONAL:DELETION:29 INTO LISP. FUNCTION NAMES WILL
30200 BE QUERIED IN PREORDER, AS NEEDED.
30300
30400
30500 DRAW A LINE FROM THE FUNCTION CALL (CONDITIONAL:DELETION:29 ARG1 ARG2)
30600 **OF THE FUNCTION CONDITIONAL:DELETION:29 TO THIS NEW PIECE OF CODE, WHI
30700 **CH IS ITS BODY:
30800
30900 (CONDITIONAL:DELETION:29
31000 (LAMBDA (DUMMY:ARGUMENT:1 ARG2)
31100 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
31200 **:RULES))
31300 (PROGN (SETQ RESULT:4 (SETINTERSECTION RULES:USED RESULT:3))
31400 (COND
31500 (RESULT:4 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
31600 RESULT:4)))
31700 (T (SETQ RESULT:4 NIL))))))
31800
31900 GC: 8
32000 17432, 17432 FREE WORDS
32100 (CONDITIONAL:DELETION:29 redefined)
32200
32300 MOVE CURSOR TO (VECTOR MODIFY:STRUCTURE:25 TYPE OF (VECTOR MODIFY:STRUCT
32400 **URE))
32500 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
32600 **ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
32700 COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
32800 **SET OF:
32900 (A .... CONDITIONAL:INSERTION)
33000 (B .... CONDITIONAL:DELETION)
33100 (C .... COMPLEX:ALTERATION)
33200
33300 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
33400 SHOULD I DISCUSS RAMIFICATIONS?NO
33500
33600 USER: (B)
33700
33800 MOVE CURSOR TO MODIFY:STRUCTURE:25
33900
34000
34100 PUP IS NOW GOING TO ENCODE THE PIECE
34200 (PROGN (CONDITIONAL:DELETION ARG1 ARG2))
34300
34400
34500 OF THE FUNCTION MODIFY:STRUCTURE:25 INTO LISP. FUNCTION NAMES WILL
34600 BE QUERIED IN PREORDER, AS NEEDED.
34700
34800 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:DELETION)
34900 IS THIS THE SAME AS A (VECTOR CONDITIONAL:DELETION) WHICH WE'VE ALREADY
35000 **SEEN AND NAMED?
35100
35200 USER: NO
35300
35400 GC: 30
35500 Running at 22457 Load av. = 1.68, USED 0:45:05.1 IN 1:26:21
35600 342, 342 FREE WORDS
35700 I DON'T KNOW ANY NAMES FOR (VECTOR CONDITIONAL:DELETION), SO YOU'LL HAVE
35800 ** TO
35900 TYPE A BRAND NEW NAME IN TO ME.
36000 USER: NIL
36100
36200 THE NAME CHOSEN IS CONDITIONAL:DELETION:30
36300
36400
36500 DRAW A LINE FROM THE FUNCTION CALL (MODIFY:STRUCTURE:25 ARG1 ARG2) OF T
36600 **HE FUNCTION MODIFY:STRUCTURE:25 TO THIS NEW PIECE OF CODE, WHICH IS IT
36700 **S BODY:
36800
36900 (MODIFY:STRUCTURE:25
37000 (LAMBDA (ARG1 ARG2)
37100 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
37200 ** SOME:PART:OF:14 ARG2))
37300 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
37400 **:RULES))
37500 (PROGN (CONDITIONAL:DELETION:30 ARG1 ARG2))))
37600 (MODIFY:STRUCTURE:25 redefined)
37700
37800 GC: 8
37900 17911, 17911 FREE WORDS
38000
38100 MOVE CURSOR TO (VECTOR CONDITIONAL:DELETION:30 TYPE OF (VECTOR CONDITION
38200 **AL:DELETION))
38300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS BOOLEAN DECISIO
38400 **N:(DO I, AT THIS POINT, CONDITIONALLY DELETE
38500 (VECTOR TUPLE SOME:PART:OF:14 ARG2) ,OR A SIMILAR ELEMENT, INTO THE DATA
38600 ** STRUCTURE (EVAL ARG2) ??? PLEASE RESPOND
38700 YES OR NO; IF YOU SAY 'YES', THEN I WILL PROBABLY HAVE TO ASK YOU SOME M
38800 **ORE QUESTIONS.)
38900 SINCE THE DECISION IS BOOLEAN, JUST ANSWER YES OR NO.
39000 SHOULD I DISCUSS RAMIFICATIONS?NO
39100
39200 NOW TYPE YOUR ANSWER: YES
39300
39400
39500 NOW WE MUST KNOW 2 THINGS:
39600 (1) WHAT WE DELETE
39700 (2) UNDER WHAT CONDITION WE DO THE DELETION
39800
39900 NOTES ABOUT (1): IF WE ARE DELETING AN ALREADY EXISTING THING, THEN
40000 JUST GIVEITS NAME; IF IT IS NEW, GIVE AN EXPRESSION INDICATING HOW WE
40100 GET IT, PERHAPS IN TERMS OF ARG1.
40200
40300 (RECALL THAT HERE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14
40400 ** ARG2))
40500
40600
40700 NOTES ABOUT (2): YOU MAY REFER TO THE RESULT OF (1) AS RESULT:5
40800 , IF (1) IS
40900 NOT SIMPLY AN OLD NAME.
41000 ALSO, WE ASSUME THAT PART OF THE CONDITION (2) IS THE FACT THAT RESULT:5
41100
41200 IS NOT ALREADY IN THE LIST. THIS NEED NOT BE
41300 RESTATED BY THE USER.
41400 TYPING SIMPLY ']' WILL CAUSE ME TO ASSUME YOU WANT THE CONDITION:
41500 (RESULT:5 ISNT NIL)
41600
41700
41800 USER: (1) : (ANY RULE ESPECIALLY ONE WHICH HAS JUST BEEN USED)
41900
42000 USER: (2): NIL
42100
42200 OK, READY TO MOVE ON NOW.
42300
42400 MOVE CURSOR TO CONDITIONAL:DELETION:30
42500
42600
42700 PUP IS NOW GOING TO ENCODE THE PIECE
42800 (PROGN (SETQ RESULT:5 (RANDOMSELECT RULES:USED SET:OF:RULES))
42900 (COND (RESULT:5 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
43000 (LIST RESULT:5))))
43100 (T (SETQ RESULT:5 NIL))))
43200
43300
43400 OF THE FUNCTION CONDITIONAL:DELETION:30 INTO LISP. FUNCTION NAMES WILL
43500 BE QUERIED IN PREORDER, AS NEEDED.
43600
43700 GC: 8
43800 17749, 17749 FREE WORDS
43900
44000
44100 DRAW A LINE FROM THE FUNCTION CALL (CONDITIONAL:DELETION:30 ARG1 ARG2)
44200 **OF THE FUNCTION CONDITIONAL:DELETION:30 TO THIS NEW PIECE OF CODE, WHI
44300 **CH IS ITS BODY:
44400
44500 (CONDITIONAL:DELETION:30
44600 (LAMBDA (DUMMY:ARGUMENT:1 ARG2)
44700 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
44800 **:RULES))
44900 (PROGN (SETQ RESULT:5 (RANDOMSELECT RULES:USED SET:OF:RULES))
45000 (COND
45100 (RESULT:5 (SET ARG2 (SETDIFFERENCE (EVAL ARG2)
45200 (LIST RESULT:5))))
45300 (T (SETQ RESULT:5 NIL))))))
45400 (CONDITIONAL:DELETION:30 redefined)
45500
45600 MOVE CURSOR TO (VECTOR LEGAL:LEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR MODI
45700 **FY:STRUCTURE))
45800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
45900 **ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
46000 COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
46100 **SET OF:
46200 (A .... CONDITIONAL:INSERTION)
46300 (B .... CONDITIONAL:DELETION)
46400 (C .... COMPLEX:ALTERATION)
46500
46600 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
46700 SHOULD I DISCUSS RAMIFICATIONS?NO
46800
46900 USER: NIL
47000
47100 MOVE CURSOR TO LEGAL:LEGAL:MODIFY:STRUCTURE
47200
47300
47400 PUP IS NOW GOING TO ENCODE THE PIECE
47500 (PROGN ARG1 ARG2
47600 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FUNCTION, BUT WE H
47700 **AVE FAITH THAT OTHER BEINGS WILL GIVE US
47800 MEANING LATER ON))
47900
48000
48100 OF THE FUNCTION LEGAL:LEGAL:MODIFY:STRUCTURE INTO LISP. FUNCTION NAMES
48200 ** WILL
48300 BE QUERIED IN PREORDER, AS NEEDED.
48400
48500 GC: 8
48600 17335, 17335 FREE WORDS
48700
48800
48900 DRAW A LINE FROM THE FUNCTION CALL (LEGAL:LEGAL:MODIFY:STRUCTURE (VECTO
49000 **R TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTION LE
49100 **GAL:LEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS ITS BOD
49200 **Y:
49300
49400 (LEGAL:LEGAL:MODIFY:STRUCTURE
49500 (LAMBDA (ARG1 ARG2)
49600 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
49700 ** SOME:PART:OF:14 ARG2))
49800 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
49900 **:RULES))
50000 (PROGN ARG1 ARG2
50100 (COMMENT AT PRESENT WE HAVE NO BODY
50200 FOR THIS FUNCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WIL
50300 **L GIVE US MEANING LATER ON))))
50400 (LEGAL:LEGAL:MODIFY:STRUCTURE redefined)
50500
50600 MOVE CURSOR TO (VECTOR ILLEGAL:ILLEGAL:MODIFY:STRUCTURE TYPE OF (VECTOR
50700 **MODIFY:STRUCTURE))
50800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS SUBSETOF DECISI
50900 **ON:(CONDITIONAL:INSERTION CONDITIONAL:DELETION
51000 COMPLEX:ALTERATION)SINCE THE DECISION IS SUBSET:OF, TYPE ANY ORDERED SUB
51100 **SET OF:
51200 (A .... CONDITIONAL:INSERTION)
51300 (B .... CONDITIONAL:DELETION)
51400 (C .... COMPLEX:ALTERATION)
51500
51600 FOR EXAMPLE, (B D) WOULD MEAN THAT THE 2ND AND 4TH ITEMS ARE RELEVANT
51700 SHOULD I DISCUSS RAMIFICATIONS?NO
51800
51900 USER: NIL
52000
52100 MOVE CURSOR TO ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
52200
52300
52400 PUP IS NOW GOING TO ENCODE THE PIECE
52500 (PROGN ARG1 ARG2
52600 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FUNCTION, BUT WE H
52700 **AVE FAITH THAT OTHER BEINGS WILL GIVE US
52800 MEANING LATER ON))
52900
53000
53100 OF THE FUNCTION ILLEGAL:ILLEGAL:MODIFY:STRUCTURE INTO LISP. FUNCTION N
53200 **AMES WILL
53300 BE QUERIED IN PREORDER, AS NEEDED.
53400
53500
53600 DRAW A LINE FROM THE FUNCTION CALL (ILLEGAL:ILLEGAL:MODIFY:STRUCTURE (V
53700 **ECTOR TUPLE SOME:PART:OF:14 ARG2) (QUOTE SET:OF:RULES)) OF THE FUNCTIO
53800 **N ILLEGAL:ILLEGAL:MODIFY:STRUCTURE TO THIS NEW PIECE OF CODE, WHICH IS
53900 ** ITS BODY:
54000
54100 (ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
54200 (LAMBDA (ARG1 ARG2)
54300 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
54400 ** SOME:PART:OF:14 ARG2))
54500 (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF
54600 **:RULES))
54700 (PROGN ARG1 ARG2
54800 (COMMENT AT PRESENT WE HAVE NO BODY
54900 FOR THIS FUNCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WIL
55000 **L GIVE US MEANING LATER ON))))
55100 (ILLEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
55200
55300 GC: 8
55400 16860, 16860 FREE WORDS
55500
55600 MOVE CURSOR TO (VECTOR SOME:PART:OF:13 TYPE OF (VECTOR SOME:PART:OF))
55700 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
55800 **ION:((VECTOR WE GET THE SOME:PART:OF FUNCTION
55900 (CADR CHOICE) BY EXAMPLE I/O) (VECTOR WE GET THE SOME:PART:OF FUNCTION (
56000 **CADR CHOICE) BY TRANSLATING AN EXPLICITLY
56100 USER-PROVIDED SENTENCE) (ERROR!))(ABOVE, ARG1 REFERS TO (EVAL ARG1) ;ALS
56200 **O, PLEASE IGNORE THE THIRD 'CHOICE'; IT IS
56300 ONLY FOR ME TO LOOK AT)
56400
56500 GC: 30
56600 300, 300 FREE WORDS
56700
56800
56900 SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1 OR A MEANS THAT IS C(VEC
57000 **TOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:13 BY EXAMPLE I/O) I
57100 **S CORRECT.
57200 2 MEANS THAT (VECTOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:13 BY
57300 ** TRANSLATING AN EXPLICITLY USER-PROVIDED SENTENCE) IS CORRECT.
57400
57500 SHOULD I DISCUSS RAMIFICATIONS?NO
57600
57700 USER: 2
57800
57900 OK, NOW TYPE IN THE SENTENCE EQUIVALENT TO THE ACTION OF THE
58000 SOME:PART:OF:FUNCTION IN QUESTION
58100
58200 USER: (THE FRONT PART OF ARG1)
58300
58400 MOVE CURSOR TO SOME:PART:OF:13
58500
58600
58700 PUP IS NOW GOING TO ENCODE THE PIECE
58800 (CAR ARG1)
58900
59000
59100 OF THE FUNCTION SOME:PART:OF:13 INTO LISP. FUNCTION NAMES WILL
59200 BE QUERIED IN PREORDER, AS NEEDED.
59300
59400
59500 DRAW A LINE FROM THE FUNCTION CALL (SOME:PART:OF:13 (EVAL ARG1)) OF THE
59600 ** FUNCTION SOME:PART:OF:13 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY
59700 **:
59800
59900 (SOME:PART:OF:13
60000 (LAMBDA (ARG1)
60100 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (EVAL ARG1))
60200 (CAR ARG1)))
60300 (SOME:PART:OF:13 redefined)
60400
60500 MOVE CURSOR TO (VECTOR SOME:PART:OF:14 TYPE OF (VECTOR SOME:PART:OF))
60600 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DICHOTOMY DECIS
60700 **ION:((VECTOR WE GET THE SOME:PART:OF FUNCTION
60800 (CADR CHOICE) BY EXAMPLE I/O) (VECTOR WE GET THE SOME:PART:OF FUNCTION (
60900 **CADR CHOICE) BY TRANSLATING AN EXPLICITLY
61000 USER-PROVIDED SENTENCE) (ERROR!))
61100 GC: 8
61200 16622, 16622 FREE WORDS
61300 (ABOVE, ARG1 REFERS TO ELEMENT:6 ;ALSO, PLEASE IGNORE THE THIRD 'CHOICE'
61400 **; IT IS ONLY FOR ME TO LOOK AT)
61500
61600
61700 SINCE THE DECISION IS DICHOTOMOUS, TYPE A 1 OR A MEANS THAT IS C(VEC
61800 **TOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:14 BY EXAMPLE I/O) I
61900 **S CORRECT.
62000 2 MEANS THAT (VECTOR WE GET THE SOME:PART:OF FUNCTION SOME:PART:OF:14 BY
62100 ** TRANSLATING AN EXPLICITLY USER-PROVIDED SENTENCE) IS CORRECT.
62200
62300 SHOULD I DISCUSS RAMIFICATIONS?NO
62400
62500 USER: 1
62600
62700 LEARN BY EXAMPLE IS NOT IN YET; PLEASE TYPE IN WHAT IT SHOULD RETURN.
62800 ITS ARGUMENT VECTOR IS (VECTOR SOME:PART:OF SOME:PART:OF:14 ELEMENT:6 NI
62900 **L) . OK, TYPE IN ANSWER:
63000 USER: (CDR ARG1)
63100
63200 MOVE CURSOR TO SOME:PART:OF:14
63300
63400
63500 PUP IS NOW GOING TO ENCODE THE PIECE
63600 (CDR ARG1)
63700
63800
63900 OF THE FUNCTION SOME:PART:OF:14 INTO LISP. FUNCTION NAMES WILL
64000 BE QUERIED IN PREORDER, AS NEEDED.
64100
64200 GC: 8
64300 16601, 16601 FREE WORDS
64400
64500
64600 DRAW A LINE FROM THE FUNCTION CALL (SOME:PART:OF:14 ARG1) OF THE FUNCTI
64700 **ON SOME:PART:OF:14 TO THIS NEW PIECE OF CODE, WHICH IS ITS BODY:
64800
64900 (SOME:PART:OF:14
65000 (LAMBDA (ARG1)
65100 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6)
65200 (CDR ARG1)))
65300 (SOME:PART:OF:14 redefined)
65400
65500 GC: 30
65600 212, 212 FREE WORDS
65700
65800
65900 MOVE CURSOR TO FAILURE:VALUE WHICH IS LOCATED INSIDE (PROGN (COMMENT IN
66000 **ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROG
66100 **N (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL
66200 **CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL
66300 **CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17
66400 **S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)
66500 **)) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL
66600 **EVAL:ARG3) (SET ARG1 FAILURE:VALUE) (RETURN EXHAUSTION:VALUE))) (SET A
66700 **RG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (
66800 **EVAL ARG5)) (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LAB
66900 **EL:2))) (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL COND
67000 **ITION VALUE WAS LEFT UNDEFINED))))
67100 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
67200
67300 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
67400 I NOTICE THAT WE HAVE LEFT FAILURE:VALUE UNDEFINED. IT IS LOCATED I
67500 **N
67600 THE FUNCTION FOREACH:16. IN OTHER WORDS, AT THE INSTANT WE KNOW
67700 THAT (VECTOR WHEN NO S1 IN SET:OF:LEGAL:STRINGS SUFFICES, WE MUST BIND S
67800 **1 TO SOME SPECIAL VALUE TO DISTINGUISH IT FROM THE LAST 'SUCCESSFUL BI
67900 **NDING-- TO THE LAST ELEMENT OF SET:OF:LEGAL:STRINGS)
68000
68100 I SUSPECT THAT THE ANSWER IS (NIL OR A LITERAL SUCH AS FAIL FAILURE OR
68200 ** NOTHING).
68300 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
68400 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
68500 LATER.' GO AHEAD NOW
68600 USER: NIL
68700
68800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING FAILUR
68900 **E:VALUE IN FOREACH:16 UNDEFINED; WILL BE GOTTEN
69000 LATER; PROBABLY NIL OR A LITERAL SUCH AS FAIL FAILURE OR NOTHING SINCE (
69100 **WHEN NO S1 IN SET:OF:LEGAL:STRINGS SUFFICES,
69200 WE MUST BIND S1 TO SOME SPECIAL VALUE TO DISTINGUISH IT FROM THE LAST 'S
69300 **UCCESSFUL BINDING-- TO THE LAST ELEMENT OF
69400 SET:OF:LEGAL:STRINGS)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SU
69500 **BSTITUTED NIL FOR FAILURE:VALUE THROUGHOUT
69600 THE FUNCTION FOREACH:16 .BY THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! TH
69700 **E META:CODE WAS CHANGED FROM (PROGN (COMMENT
69800 IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PRO
69900 **GN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
70000 BOUND TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGA
70100 **L:STRINGS) (COMMENT IN ALL CALLS TO DATE,
70200 ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LE
70300 **VEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1
70400 BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (C
70500 **OND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN
70600 EXHAUSTION:VALUE))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL
70700 **:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND
70800 (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT AT
70900 **THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL
71000 CONDITION VALUE WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT IN ALL CALLS T
71100 **O DATE, ARG3 IS INSTANTIATED AS
71200 SET:OF:LEGAL:STRINGS) (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUN
71300 **D TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3
71400 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL CALLS TO DATE, ARG5 IS
71500 ** BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17
71600 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
71700 ** (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3))
71800 LABEL:2 (COND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN EXHAUSTION:VALUE)
71900 **)) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3
72000 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND (RESULT:1 (RETURN UNT
72100 **IL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT
72200 AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALUE WAS LEF
72300 **T UNDEFINED))))))
72400
72500
72600 GC: 30
72700 306, 306 FREE WORDS
72800
72900
73000 MOVE CURSOR TO EXHAUSTION:VALUE WHICH IS LOCATED INSIDE (PROGN (COMMENT
73100 **IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (P
73200 **ROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN A
73300 **LL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN A
73400 **LL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:
73500 **17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEV
73600 **EL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NU
73700 **LL EVAL:ARG3) (SET ARG1 NIL) (RETURN EXHAUSTION:VALUE))) (SET ARG1 (CA
73800 **R EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL AR
73900 **G5)) (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2)))
74000 ** (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION V
74100 **ALUE WAS LEFT UNDEFINED))))
74200 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
74300
74400 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
74500 I NOTICE THAT WE HAVE LEFT EXHAUSTION:VALUE UNDEFINED. IT IS LOCATE
74600 **D IN
74700 THE FUNCTION FOREACH:16. IN OTHER WORDS, AT THE INSTANT WE KNOW
74800 THAT (VECTOR NO EXISTING S1 IN SET:OF:LEGAL:STRINGS WILL SUFFICE. WE MUS
74900 **T KNOW WHAT VALUE TO RETURN.)
75000
75100 I SUSPECT THAT THE ANSWER IS (NIL).
75200 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
75300 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
75400 LATER.' GO AHEAD NOW
75500 USER: NIL
75600
75700 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING EXHAUS
75800 **TION:VALUE IN FOREACH:16 UNDEFINED; WILL BE
75900 GOTTEN LATER; PROBABLY NIL SINCE (NO EXISTING S1 IN SET:OF:LEGAL:STRINGS
76000 ** WILL SUFFICE. WE MUST KNOW WHAT VALUE TO
76100 RETURN.)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED NIL
76200 ** FOR EXHAUSTION:VALUE THROUGHOUT THE FUNCTION
76300 FOREACH:16 .BY THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE W
76400 **AS CHANGED FROM (PROGN (COMMENT IN ALL CALLS
76500 TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN (COMMENT I
76600 **N ALL CALLS TO DATE, ARG1 IS BOUND TO S1)
76700 (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (C
76800 **OMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND
76900 TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT
77000 **PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL)))
77100 (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:
77200 **ARG3) (SET ARG1 NIL) (RETURN NIL))) (SET ARG1
77300 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL A
77400 **RG5)) (COND (RESULT:1 (RETURN
77500 UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMENT AT THE TIME THAT FORE
77600 **ACH:16 WAS CODED, THE UNTIL CONDITION VALUE
77700 WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT IN ALL CALLS TO DATE, ARG3 IS
77800 **INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN
77900 (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL CALL
78000 **S TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS)
78100 (COMMENT IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PAR
78200 **SE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT
78300 PARSE:BACKWARD:18 S1 ARG1 BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:AR
78400 **G3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:ARG3)
78500 (SET ARG1 NIL) (RETURN NIL))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3
78600 ** (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5))
78700 (COND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMME
78800 **NT AT THE TIME THAT FOREACH:16 WAS CODED,
78900 THE UNTIL CONDITION VALUE WAS LEFT UNDEFINED))))))
79000
79100
79200
79300 MOVE CURSOR TO INITIAL:VALUE:OF:SET:OF:LEGAL:STRINGS WHICH IS LOCATED IN
79400 **SIDE NIL
79500 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION GLOBAL:CONTEXT:0
79600 GC: 30
79700 306, 306 FREE WORDS
79800
79900
80000 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
80100 I NOTICE THAT WE HAVE LEFT INITIAL:VALUE:OF:SET:OF:LEGAL:STRINGS UN
80200 **DEFINED. IT IS LOCATED IN
80300 THE FUNCTION GLOBAL:CONTEXT:0. IN OTHER WORDS, AT THE INSTANT WE K
80400 **NOW
80500 THAT (COMMENT AT THE BEGINNING WE ONLY KNOW A CONSTANT AMOUNT OF INFORMA
80600 **TION, OFTEN NONE AT ALL)
80700
80800 I SUSPECT THAT THE ANSWER IS (NIL OR THE INITIAL STATE OF KNOWLEDGE AB
80900 **OUT LEGAL:STRINGS).
81000 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
81100 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
81200 LATER.' GO AHEAD NOW
81300 USER: ((S))
81400
81500 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING INITIA
81600 **L:VALUE:OF:SET:OF:LEGAL:STRINGS IN
81700 GLOBAL:CONTEXT:0 UNDEFINED; WILL BE GOTTEN LATER; PROBABLY NIL OR THE IN
81800 **ITIAL STATE OF KNOWLEDGE ABOUT LEGAL:STRINGS
81900 SINCE (COMMENT AT THE BEGINNING WE ONLY KNOW A CONSTANT AMOUNT OF INFORM
82000 **ATION, OFTEN NONE AT ALL)) ,AND HERE IS WHAT
82100 WE FINALLY DID ABOUT IT: (SET:OF:LEGAL:STRINGS WILL RECEIVE THE GLOBAL I
82200 **NITIALIZATION VALUE ((S))))
82300
82400
82500
82600 MOVE CURSOR TO UNTIL:CONDITION:VALUE WHICH IS LOCATED INSIDE (PROGN (COM
82700 **MENT IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRING
82800 **S) (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS BOUND TO S1) (COMMENT
82900 ** IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT
83000 ** IN ALL CALLS TO DATE, ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FOR
83100 **WARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1 BPARS
83200 **E:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND
83300 ** ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN NIL))) (SET ARG1 (CAR EVAL:A
83400 **RG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (CO
83500 **ND (RESULT:1 (RETURN UNTIL:CONDITION:VALUE)) (T (GO LABEL:2))) (COMMEN
83600 **T AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALUE WAS
83700 ** LEFT UNDEFINED))))
83800 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION FOREACH:16
83900 GC: 30
84000 295, 295 FREE WORDS
84100
84200
84300 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
84400 I NOTICE THAT WE HAVE LEFT UNTIL:CONDITION:VALUE UNDEFINED. IT IS L
84500 **OCATED IN
84600 THE FUNCTION FOREACH:16. IN OTHER WORDS, AT THE INSTANT WE KNOW
84700 THAT (VECTOR THE UNTIL:CONDITION HAS BECOME TRUE FOR THE FIRST TIME. WE
84800 **MUST KNOW WHAT VALUE TO RETURN)
84900
85000 I SUSPECT THAT THE ANSWER IS (EITHER RESULT:1 NIL OR (COMMENT EVAL UNT
85100 **IL:CONDITION) OR (COMMENT EVAL POSSIBLE:NAME:OF:CLASS)).
85200 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
85300 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
85400 LATER.' GO AHEAD NOW
85500 USER: RESULT:1
85600
85700 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING UNTIL:
85800 **CONDITION:VALUE IN FOREACH:16 UNDEFINED; WILL
85900 BE GOTTEN LATER; PROBABLY EITHER RESULT:1 NIL OR (COMMENT EVAL UNTIL:CON
86000 **DITION) OR (COMMENT EVAL POSSIBLE:NAME:OF:CLASS)
86100 SINCE (THE UNTIL:CONDITION HAS BECOME TRUE FOR THE FIRST TIME. WE MUST K
86200 **NOW WHAT VALUE TO RETURN)) ,AND HERE IS WHAT
86300 WE FINALLY DID ABOUT IT: (WE SUBSTITUTED RESULT:1 FOR UNTIL:CONDITION:VA
86400 **LUE THROUGHOUT THE FUNCTION FOREACH:16 .BY
86500 THE WAY, THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM
86600 ** (PROGN (COMMENT IN ALL CALLS TO DATE, ARG3
86700 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PROGN (COMMENT IN ALL CALLS TO
86800 ** DATE, ARG1 IS BOUND TO S1) (COMMENT IN ALL
86900 CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGAL:STRINGS) (COMMENT IN ALL CA
87000 **LLS TO DATE, ARG5 IS BOUND TO (COMMENT OR
87100 (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (COMMENT PARSE:BACKWARD:
87200 **18 S1 ARG1 BPARSE:LEVEL))) (PROG (RESULT:1)
87300 (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (COND ((NULL EVAL:ARG3) (SET ARG1 N
87400 **IL) (RETURN NIL))) (SET ARG1 (CAR EVAL:ARG3))
87500 (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ RESULT:1 (EVAL ARG5)) (COND (RESU
87600 **LT:1 (RETURN RESULT:1)) (T (GO LABEL:2)))
87700 (COMMENT AT THE TIME THAT FOREACH:16 WAS CODED, THE UNTIL CONDITION VALU
87800 **E WAS LEFT UNDEFINED)))) TO (PROGN (COMMENT
87900 IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS SET:OF:LEGAL:STRINGS) (PRO
88000 **GN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
88100 BOUND TO S1) (COMMENT IN ALL CALLS TO DATE, ARG3 IS BOUND TO SET:OF:LEGA
88200 **L:STRINGS) (COMMENT IN ALL CALLS TO DATE,
88300 ARG5 IS BOUND TO (COMMENT OR (COMMENT PARSE:FORWARD:17 S1 ARG1 FPARSE:LE
88400 **VEL) (COMMENT PARSE:BACKWARD:18 S1 ARG1
88500 BPARSE:LEVEL))) (PROG (RESULT:1) (SETQ EVAL:ARG3 (EVAL ARG3)) LABEL:2 (C
88600 **OND ((NULL EVAL:ARG3) (SET ARG1 NIL) (RETURN
88700 NIL))) (SET ARG1 (CAR EVAL:ARG3)) (SETQ EVAL:ARG3 (CDR EVAL:ARG3)) (SETQ
88800 ** RESULT:1 (EVAL ARG5)) (COND (RESULT:1 (RETURN
88900 RESULT:1)) (T (GO LABEL:2))) (COMMENT AT THE TIME THAT FOREACH:16 WAS CO
89000 **DED, THE UNTIL CONDITION VALUE WAS LEFT
89100 UNDEFINED))))))
89200
89300
89400 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (SET:OF:LEGAL:STRINGS I
89500 **S A DATA STRUCTURE, WITH ELEMENTS OF TYPE
89600 S1 ;BUT NO ACCESSION INFORMATION IS KNOWN) ,AND HERE IS WHAT WE FINALLY
89700 **DID ABOUT IT: (I DONT THINK THIS MAKES TOO
89800 MUCH SENSE SO I AM GOING TO SKIP IT -- AT LEAST FOR NOW))
89900
90000
90100
90200 MOVE CURSOR TO MODIFY:CONDITION WHICH IS LOCATED INSIDE (PROGN (COMMENT
90300 **IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:
90400 **OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (Q
90500 **UOTE SET:OF:RULES)) (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((M
90600 **ODIFY:CONDITION ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2)))))))
90700 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION MODIFY:SOME:22
90800
90900 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
91000 I NOTICE THAT WE HAVE LEFT MODIFY:CONDITION UNDEFINED. IT IS LOCATE
91100 **D IN
91200 THE FUNCTION MODIFY:SOME:22. IN OTHER WORDS, AT THE INSTANT WE KNO
91300 **W
91400 THAT (COMMENT THESE TWO ARE THE MOST PROBABLE TESTS WHEN (VECTOR GRAMMAT
91500 **ICAL:INFERENCE) IS INVOLVED)
91600
91700 I SUSPECT THAT THE ANSWER IS (SOME PREDICATE, E.G, PARSE OR TEST).
91800 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
91900 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
92000 LATER.' GO AHEAD NOW
92100 USER: PARSE
92200
92300 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
92400 IS THIS THE SAME AS A (VECTOR PARSE) WHICH WE'VE ALREADY SEEN AND NAMED?
92500
92600 USER: YES
92700
92800 GC: 30
92900 346, 346 FREE WORDS
93000
93100 SINCE PARSE:15 IS THE ONLY NAME FOR (VECTOR PARSE),
93200 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
93300 YOU WANT. AM I RIGHT?
93400 USER: YES
93500
93600 THE NAME CHOSEN IS PARSE:15
93700
93800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING MODIFY
93900 **:CONDITION IN MODIFY:SOME:22 UNDEFINED; WILL
94000 BE GOTTEN LATER; PROBABLY SOME PREDICATE, E.G, PARSE OR TEST SINCE (COMM
94100 **ENT THESE TWO ARE THE MOST PROBABLE TESTS
94200 WHEN (GRAMMATICAL:INFERENCE) IS INVOLVED)) ,AND HERE IS WHAT WE FINALLY
94300 **DID ABOUT IT: (WE SUBSTITUTED PARSE FOR
94400 MODIFY:CONDITION THROUGHOUT THE FUNCTION MODIFY:SOME:22 .BY THE WAY, THI
94500 **S WAS ONE OF MY SUGGESTIONS!! THE META:CODE
94600 WAS CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIA
94700 **TED AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT
94800 IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)) (MAP
94900 **C MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND
95000 ((PARSE ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2))))))) TO (PROGN (COMMENT IN
95100 ** ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS
95200 (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INS
95300 **TANTIATED AS (QUOTE SET:OF:RULES)) (MAPC
95400 MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 ILS) (MODIFY:STRUCTU
95500 **RE:23 ARG1 ARG2)))))))))
95600
95700
95800
95900 MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
96000 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL
96100 **CALLS TO DATE, ARG2 IS INSTANTIATED AS AR) (COMMENT IN ALL CALLS TO DA
96200 **TE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQUAL ARG1 ARG2) T) (
96300 **(ZEROP ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR I
96400 **N (APPLYRULE:19 (ANTIRULE R) ARG2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 A
96500 **R (SUB1 ARG3)) (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDI
96600 **TIONAL:INSERTION:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS TH
96700 **E BODY OF THE FUNCTION PARSE:BACKWARD:18
96800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
96900 **E SHOULD REPLACE ARG2 BY PARSE:BACKWARD:18:ARG2)
97000 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PARSE:BA
97100 **CKWARD:18:ARG2 IN THE BEING PARSE:BACKWARD:18))
97200
97300
97400
97500 MOVE CURSOR TO ARG3 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
97600 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL
97700 **CALLS TO DATE, PARSE:BACKWARD:18:ARG2 IS INSTANTIATED AS AR) (COMMENT
97800 **IN ALL CALLS TO DATE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQU
97900 **AL ARG1 PARSE:BACKWARD:18:ARG2) T) ((ZEROP ARG3) NIL) (T (FOREACH:16 R
98000 ** IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:19 (ANTIRULE R) PARSE
98100 **:BACKWARD:18:ARG2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 AR (SUB1 ARG3)) (
98200 **CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTION
98300 **:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FU
98400 **NCTION PARSE:BACKWARD:18
98500 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
98600 **E SHOULD REPLACE ARG3 BY PARSE:BACKWARD:18:ARG3)
98700 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG3 BY PARSE:BA
98800 **CKWARD:18:ARG3 IN THE BEING PARSE:BACKWARD:18))
98900
99000
99100 GC: 30
99200 287, 287 FREE WORDS
99300
99400
99500 MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
99600 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NIL) (COMMENT IN ALL
99700 **CALLS TO DATE, PARSE:BACKWARD:18:ARG2 IS INSTANTIATED AS AR) (COMMENT
99800 **IN ALL CALLS TO DATE, PARSE:BACKWARD:18:ARG3 IS INSTANTIATED AS (SUB1
99900 **PARSE:BACKWARD:18:ARG3)) (COND ((EQUAL ARG1 PARSE:BACKWARD:18:ARG2) T)
00100 ** ((ZEROP PARSE:BACKWARD:18:ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES
00200 ** DO (FOREACH:16 AR IN (APPLYRULE:19 (ANTIRULE R) PARSE:BACKWARD:18:ARG
00300 **2) DO (PROG1 (PARSE:BACKWARD:18 ARG1 AR (SUB1 PARSE:BACKWARD:18:ARG3))
00400 ** (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTI
00500 **ON:20 (ANTIRULE R) (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE
00600 **FUNCTION PARSE:BACKWARD:18
00700 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:BACKWARD:18 W
00800 **E SHOULD REPLACE ARG1 BY PARSE:BACKWARD:18:ARG1)
00900 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:BA
01000 **CKWARD:18:ARG1 IN THE BEING PARSE:BACKWARD:18))
01100
01200
01300
01400 MOVE CURSOR TO ARG3 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
01500 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
01600 **ALLS TO DATE, ARG2 IS INSTANTIATED AS NIL) (COMMENT IN ALL CALLS TO DA
01700 **TE, ARG3 IS INSTANTIATED AS (SUB1 ARG3)) (COND ((EQUAL ARG1 ARG2) T) (
01800 **(ZEROP ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR I
01900 **N (APPLYRULE:19 R ARG1) DO (PROG1 (PARSE:FORWARD:17 AR ARG2 (SUB1 ARG3
02000 **)) (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSER
02100 **TION:20 R (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FUNCTION
02200 **PARSE:FORWARD:17
02300 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
02400 ** SHOULD REPLACE ARG3 BY PARSE:FORWARD:17:ARG3)
02500 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG3 BY PARSE:FO
02600 **RWARD:17:ARG3 IN THE BEING PARSE:FORWARD:17))
02700
02800
02900 GC: 30
03000 266, 266 FREE WORDS
03100
03200
03300 MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
03400 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
03500 **ALLS TO DATE, ARG2 IS INSTANTIATED AS NIL) (COMMENT IN ALL CALLS TO DA
03600 **TE, PARSE:FORWARD:17:ARG3 IS INSTANTIATED AS (SUB1 PARSE:FORWARD:17:AR
03700 **G3)) (COND ((EQUAL ARG1 ARG2) T) ((ZEROP PARSE:FORWARD:17:ARG3) NIL) (
03800 **T (FOREACH:16 R IN SET:OF:RULES DO (FOREACH:16 AR IN (APPLYRULE:19 R A
03900 **RG1) DO (PROG1 (PARSE:FORWARD:17 AR ARG2 (SUB1 PARSE:FORWARD:17:ARG3))
04000 ** (CONDITIONAL:INSERTION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTI
04100 **ON:20 R (QUOTE RULES:USED)))))))) WHICH IS THE BODY OF THE FUNCTION PA
04200 **RSE:FORWARD:17
04300 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
04400 ** SHOULD REPLACE ARG2 BY PARSE:FORWARD:17:ARG2)
04500 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PARSE:FO
04600 **RWARD:17:ARG2 IN THE BEING PARSE:FORWARD:17))
04700
04800
04900
05000 MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
05100 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS AR) (COMMENT IN ALL C
05200 **ALLS TO DATE, PARSE:FORWARD:17:ARG2 IS INSTANTIATED AS NIL) (COMMENT I
05300 **N ALL CALLS TO DATE, PARSE:FORWARD:17:ARG3 IS INSTANTIATED AS (SUB1 PA
05400 **RSE:FORWARD:17:ARG3)) (COND ((EQUAL ARG1 PARSE:FORWARD:17:ARG2) T) ((Z
05500 **EROP PARSE:FORWARD:17:ARG3) NIL) (T (FOREACH:16 R IN SET:OF:RULES DO (
05600 **FOREACH:16 AR IN (APPLYRULE:19 R ARG1) DO (PROG1 (PARSE:FORWARD:17 AR
05700 **PARSE:FORWARD:17:ARG2 (SUB1 PARSE:FORWARD:17:ARG3)) (CONDITIONAL:INSER
05800 **TION:20 AR (QUOTE PARSE:TREE)) (CONDITIONAL:INSERTION:20 R (QUOTE RULE
05900 **S:USED)))))))) WHICH IS THE BODY OF THE FUNCTION PARSE:FORWARD:17
06000 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:FORWARD:17 WE
06100 ** SHOULD REPLACE ARG1 BY PARSE:FORWARD:17:ARG1)
06200 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:FO
06300 **RWARD:17:ARG1 IN THE BEING PARSE:FORWARD:17))
06400
06500
06600 GC: 30
06800 273, 273 FREE WORDS
08200
08300
08400 MOVE CURSOR TO BPARSE:LEVEL WHICH IS LOCATED INSIDE (PROGN (COMMENT IN A
08500 **LL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMM
08600 **ENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING ITS INST
08700 **ANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL
08800 **) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:ST
08900 **RINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:1
09000 **8 S1 ARG1 BPARSE:LEVEL)))))
09100 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION PARSE:15PUPRIN1
09200
09300
09400 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
09500 I NOTICE THAT WE HAVE LEFT BPARSE:LEVEL UNDEFINED. IT IS LOCATED IN
09600 THE FUNCTION PARSE:15. IN OTHER WORDS, AT THE INSTANT WE KNOW
09700 THAT (COMMENT 1 IS TOO SHALLOW AND >5 IS TOO LONG TO RUN REASONABLY)
09800
09900 I SUSPECT THAT THE ANSWER IS (ONE OF 2 3 4 5).
10000 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
10100 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
10200 LATER.' GO AHEAD NOW
10300 USER: 3
10400
10500 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING BPARSE
10600 **:LEVEL IN PARSE:15 UNDEFINED; WILL BE GOTTEN
10700 LATER; PROBABLY ONE OF 2 3 4 5 SINCE (COMMENT 1 IS TOO SHALLOW AND >5 IS
10800 ** TOO LONG TO RUN REASONABLY)) ,AND HERE IS
10900 WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED 3 FOR BPARSE:LEVEL THROUGH
11000 **OUT THE FUNCTION PARSE:15 .BY THE WAY, THIS
11100 WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM (PROGN (COMME
11200 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED
11300 AS ELEMENT:6) (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NU
11400 **DGE PUP5 INTO NOTING ITS INSTANTIATION HERE
11500 IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL) (SETQ ARG1 (SOM
11600 **E:PART:OF:14 ARG1)) (FOREACH:16 S1 IN
11700 SET:OF:LEGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PAR
11800 **SE:BACKWARD:18 S1 ARG1 3))))) TO (PROGN (COMMENT
11900 IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (CO
12000 **MMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE
12100 PUP5 INTO NOTING ITS INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NI
12200 **L) (SETQ RULES:USED NIL) (SETQ ARG1 (
12300 SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (OR (PA
12400 **RSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (
12500 PARSE:BACKWARD:18 S1 ARG1 3)))))))
12600
12700
12800
12900 MOVE CURSOR TO FPARSE:LEVEL WHICH IS LOCATED INSIDE (PROGN (COMMENT IN A
13000 **LL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMM
13100 **ENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING ITS INST
13200 **ANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED NIL
13300 **) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:ST
13400 **RINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 FPARSE:LEVEL) (PARSE:BACKWARD:1
13500 **8 S1 ARG1 3)))))
13600 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION PARSE:15
13700 GC: 30
13800 203, 203 FREE WORDS
13900
14000
14100 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
14200 I NOTICE THAT WE HAVE LEFT FPARSE:LEVEL UNDEFINED. IT IS LOCATED IN
14300 THE FUNCTION PARSE:15. IN OTHER WORDS, AT THE INSTANT WE KNOW
14400 THAT (COMMENT 1 IS TOO SHALLOW AND >5 IS TOO DEEP AND WOULD TAKE TOO LON
14500 **G)
14600
14700 I SUSPECT THAT THE ANSWER IS (ONE OF 2 3 4 5).
14800 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
14900 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
15000 LATER.' GO AHEAD NOW
15100 USER: 2
15200
15300 GC: 28
15400 285, 285 FREE WORDS
15500
15600 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING FPARSE
15700 **:LEVEL IN PARSE:15 UNDEFINED; WILL BE GOTTEN
15800 LATER; PROBABLY ONE OF 2 3 4 5 SINCE (COMMENT 1 IS TOO SHALLOW AND >5 IS
15900 ** TOO DEEP AND WOULD TAKE TOO LONG)) ,AND HERE
16000 IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED 2 FOR FPARSE:LEVEL THRO
16100 **UGHOUT THE FUNCTION PARSE:15 .BY THE WAY,
16200 THIS WAS ONE OF MY SUGGESTIONS!! THE META:CODE WAS CHANGED FROM (PROGN (
16300 **COMMENT IN ALL CALLS TO DATE, ARG1 IS
16400 INSTANTIATED AS ELEMENT:6) (PROGN ARG1 (COMMENT THIS APPEARANCE OF ARG1
16500 **IS JUST TO NUDGE PUP5 INTO NOTING ITS
16600 INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:USED N
16700 **IL) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (
16800 FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 2
16900 **) (PARSE:BACKWARD:18 S1 ARG1 3))))) TO (PROGN
17000 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN
17100 ** ARG1 (COMMENT THIS APPEARANCE OF ARG1 IS
17200 JUST TO NUDGE PUP5 INTO NOTING ITS INSTANTIATION HERE IN THE CODE) (SETQ
17300 ** PARSE:TREE NIL) (SETQ RULES:USED NIL) (SETQ
17400 ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:LEGAL:STRINGS DO (
17500 **OR (PARSE:FORWARD:17 S1 ARG1 2) (
17600 PARSE:BACKWARD:18 S1 ARG1 3)))))))
17700
17800
17900
18000 MOVE CURSOR BACK AND FORTH OVER THE INFINITE LOOP FROM LABEL:3 TO (VECTO
18100 **R GO LABEL:3) IN THE BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS TO DA
18200 **TE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (COMM
18300 **ENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)
18400 **) (PROG NIL LABEL:3 (MODIFY:STRUCTURE:25 ARG1 ARG2) (GO LABEL:3) (COMM
18500 **ENT INFINITE LOOP IN THIS PROG))) WHICH IS THE BODY
18600 OF THE FUNCTION MODIFY:UNTIL:24
18700 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
18800 IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
18900 **AMED?
19000
19100 USER: NO
19200 I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
19300 TYPE A BRAND NEW NAME IN TO ME.
19400 USER: NIL
19500
19600 THE NAME CHOSEN IS IS:OF:TYPE:31
19700
19800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (INFINITE LOOP IN MODIF
19900 **Y:UNTIL:24 FROM LABEL:3 TO (GO LABEL:3)) ,AND
20000 HERE IS WHAT WE FINALLY DID ABOUT IT: (INFINITE LOOP TERMINATION DECISIO
20100 **N IS ABOUT TO BE INVESTIGATED, I BETCHA!!!))
20200
20300
20400 GC: 30
20500 252, 252 FREE WORDS
20600
20700 MOVE CURSOR TO (VECTOR IS:OF:TYPE:31 TYPE OF (VECTOR IS:OF:TYPE))
20800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
20900 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
21000 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
21100 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
21200 TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
21300 TYPE IN THE DEFINITION OF IS:OF:TYPE:31
21400
21500 SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
21600 LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
21700 THE (BREAKAWAY) TYPE, AND SHOULD BE FALSE IF IT ISNT OF
21800 THAT TYPE.
21900
22000 SHOULD I DISCUSS RAMIFICATIONS?NO
22100
22200 USER: (ARG1 CAN BE PARSED EQUALS NIL)
22300
22400 GC: 8
22500 15057, 15057 FREE WORDS
22600
22700 MOVE CURSOR TO (VECTOR IS:OF:TYPE:31 TYPE OF (VECTOR IS:OF:TYPE))
22800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
22900 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
23000 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
23100 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
23200 TO IT)
23300 MOVE CURSOR TO IS:OF:TYPE:31
23400
23500
23600 PUP IS NOW GOING TO ENCODE THE PIECE
23700 (EQUAL (PARSE ARG1)
23800 NIL)
23900
24000
24100 OF THE FUNCTION IS:OF:TYPE:31 INTO LISP. FUNCTION NAMES WILL
24200 BE QUERIED IN PREORDER, AS NEEDED.
24300
24400 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR PARSE)
24500 IS THIS THE SAME AS A (VECTOR PARSE) WHICH WE'VE ALREADY SEEN AND NAMED?
24600
24700 USER: YES
24800
24900 SINCE PARSE:15 IS THE ONLY NAME FOR (VECTOR PARSE),
25000 AT LEAST AS FAR AS PUP KNOWS RIGHT NOW, PUP ASSUMES THAT IS THE ONE
25100 YOU WANT. AM I RIGHT?
25200 USER: YES
25300
25400 THE NAME CHOSEN IS PARSE:15
25500
25600 GC: 8
25700 15034, 15034 FREE WORDS
25800
25900
26000 DRAW A LINE FROM THE FUNCTION CALL (IS:OF:TYPE:31 ARG1 (COMMENT BREAKAW
26100 **AY)) OF THE FUNCTION IS:OF:TYPE:31 TO THIS NEW PIECE OF CODE, WHICH IS
26200 ** ITS BODY:
26300
26400 (IS:OF:TYPE:31
26500 (LAMBDA (ARG1 DUMMY:ARGUMENT:1)
26600 (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE
26700 ** SOME:PART:OF:14 ARG2))
26800 (EQUAL (PARSE:15 ARG1)
26900 NIL)))
27000
27100
27200 IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:1) STILL THE PROPER EXPLI
27300 **CIT
27400 ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:31?
27500 USER: NO
27600
27700 WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
27800 USER: T
27900 (IS:OF:TYPE:31 redefined)
28000
28100 GC: 30
28200 195, 707 FREE WORDS
28300
28400
28500 MOVE CURSOR TO OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS WHICH IS LOCATED INS
28600 **IDE (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME
28700 **:OF:CLASS) (PROGN (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE AS
28800 **SIGNMENT TO AN ALREADY EXISITNG VALUE) (SET ARG1 OBVIOUS:KNOWN:VALUE:O
28900 **F:NAME:OF:CLASS)))
29000 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION TAKE:HOLD:OF:9
29100
29200 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
29300 I NOTICE THAT WE HAVE LEFT OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS UND
29400 **EFINED. IT IS LOCATED IN
29500 THE FUNCTION TAKE:HOLD:OF:9. IN OTHER WORDS, AT THE INSTANT WE KNO
29600 **W
29700 THAT (COMMENT I KNOW I NEED NOT DO ANY REAL WORK TO GET IT)
29800
29900 I SUSPECT THAT THE ANSWER IS (SOME JUST-READ-IN VALUE).
30000 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
30100 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
30200 LATER.' GO AHEAD NOW
30300 USER: CLASS:NAME:NAME:N
30400
30500 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING OBVIOU
30600 **S:KNOWN:VALUE:OF:NAME:OF:CLASS IN TAKE:HOLD:OF:9
30700 UNDEFINED; WILL BE GOTTEN LATER; PROBABLY SOME JUST-READ-IN VALUE SINCE
30800 **(COMMENT I KNOW I NEED NOT DO ANY REAL WORK
30900 TO GET IT)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE SUBSTITUTED C
31000 **LASS:NAME:NAME:N FOR
31100 OBVIOUS:KNOWN:VALUE:OF:NAME:OF:CLASS THROUGHOUT THE FUNCTION TAKE:HOLD:O
31200 **F:9 .THIS WASN'T WHAT I EXPECTED, BY THE WAY.
31300 THE META:CODE WAS CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG
31400 **1 IS INSTANTIATED AS NAME:OF:CLASS) (PROGN
31500 (COMMENT NOTHING MUCH TO DO HERE; JUST ONE SIMPLE ASSIGNMENT TO AN ALREA
31600 **DY EXISITNG VALUE) (SET ARG1 CLASS:NAME:NAME:N)))
31700 TO (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS NAME:OF
31800 **:CLASS) (PROGN (COMMENT NOTHING MUCH TO DO
31900 HERE; JUST ONE SIMPLE ASSIGNMENT TO AN ALREADY EXISITNG VALUE) (SET ARG1
32000 ** CLASS:NAME:NAME:N)))))
32100
32200
32300
32400 MOVE CURSOR BACK AND FORTH OVER THE INFINITE LOOP FROM LABEL:1 TO (VECTO
32500 **R GO LABEL:1) IN THE BLOCK OF CODE: (PROG NIL LABEL:1 (TAKE:HOLD:OF:5
32600 **ELEMENT:6) (COND ((IS:OF:TYPE:7 ELEMENT:6 (COMMENT PARTITION:BY:TAKE:E
32700 **LE:AND:CLASS)) (PROGN (SETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS)) (CO
32800 **MMENT NOTICE THAT WE DO NOT NECESSARILY HAVE TO MAKE THE PRECEDING 'GU
32900 **ESS' IN ALL POSSIBLE ALGORITHMS) (TAKE:HOLD:OF:9 NAME:OF:CLASS) (COMPL
33000 **EX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:6 PRESULT))) (T (PROGN (S
33100 **ETQ PRESULT (GET:HOLD:OF:8 NAME:OF:CLASS)) (TAKE:HOLD:OF:11 NAME:OF:CL
33200 **ASS) (COMPLEX:MODIFY:STRUCTURE:10 NAME:OF:CLASS ELEMENT:6 PRESULT))))
33300 **(GO LABEL:1) (COMMENT INFINITE LOOP IN THIS PROG)) WHICH IS THE BODY
33400 OF THE FUNCTION PAD:4
33500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR IS:OF:TYPE)
33600 IS THIS THE SAME AS A (VECTOR IS:OF:TYPE) WHICH WE'VE ALREADY SEEN AND N
33700 **AMED?
33800
33900 USER: NO
34000 I DON'T KNOW ANY NAMES FOR (VECTOR IS:OF:TYPE), SO YOU'LL HAVE TO
34100 TYPE A BRAND NEW NAME IN TO ME.
34200 USER: NIL
34300
34400 THE NAME CHOSEN IS IS:OF:TYPE:32
34500
34600 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (INFINITE LOOP IN PAD:4
34700 ** FROM LABEL:1 TO (GO LABEL:1)) ,AND HERE IS
34800 WHAT WE FINALLY DID ABOUT IT: (INFINITE LOOP TERMINATION DECISION IS ABO
34900 **UT TO BE INVESTIGATED, I BETCHA!!!))
35000
35100
35200 MOVE CURSOR TO (VECTOR IS:OF:TYPE:32 TYPE OF (VECTOR IS:OF:TYPE))
35300 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
35400 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
35500 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
35600 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
35700 TO IT)SINCE THE QUESTION IS ONE OF DEFINITION, PLEASE JUST
35800 TYPE IN THE DEFINITION OF IS:OF:TYPE:32
35900
36000 SINCE THIS IS A PREDICATE, THE EXPRESSION YOU TYPE IN SHOULD BE A
36100 LOGICAL EXPRESSION, WHICH IS TRUE IF ARG1 IS OF
36200 THE (BREAKAWAY) TYPE, AND SHOULD BE FALSE IF IT ISNT OF
36300 THAT TYPE.
36400
36500 SHOULD I DISCUSS RAMIFICATIONS?NO
36600
36700 USER: (THE SECOND ELEMENT OF ELEMENT:6 EQUALS S)
36800
36900 GC: 8
37000 14244, 14244 FREE WORDS
37100 (IS S A LITERAL CONSTANT (WHOSE VALUE SHOULD BE ITSELF) (REPLY YES OR NO
37200 **, PLEASE) USER...)
37300 YES
37400
37500 GC: 8
37600 14701, 14701 FREE WORDS
37700
37800 MOVE CURSOR TO (VECTOR IS:OF:TYPE:32 TYPE OF (VECTOR IS:OF:TYPE))
37900 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS DEFINITION DECI
38000 **SION:(HOW DO WE KNOW WHEN THE 'IS:OF:TYPE'
38100 PREDICATE IS TRUE, AND WHEN IT IS FALSE? PUP ASSUMES THAT USER WILL TYPE
38200 ** IN A LOGICAL SENTENCE WHOSE TRUTH IS EQUIVALENT
38300 TO IT)
38400 MOVE CURSOR TO IS:OF:TYPE:32
38500
38600
38700 PUP IS NOW GOING TO ENCODE THE PIECE
38800 (EQUAL (CADR ELEMENT:6)
38900 S)
39000
39100
39200 OF THE FUNCTION IS:OF:TYPE:32 INTO LISP. FUNCTION NAMES WILL
39300 BE QUERIED IN PREORDER, AS NEEDED.
39400
39500
39600 DRAW A LINE FROM THE FUNCTION CALL (IS:OF:TYPE:32 ARG1 (COMMENT BREAKAW
39700 **AY)) OF THE FUNCTION IS:OF:TYPE:32 TO THIS NEW PIECE OF CODE, WHICH IS
39800 ** ITS BODY:
39900
40000 (IS:OF:TYPE:32
40100 (LAMBDA (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
40200 (EQUAL (CADR ELEMENT:6)
40300 S)))
40400
40500
40600 IS (MATCH (TUPLE COMMENT FRAG1) DUMMY:ARGUMENT:1) STILL THE PROPER EXPLI
40700 **CIT
40800 ARGS CHECK FOR THE FUNCTION IS:OF:TYPE:32?
40900 USER: NO
41000
41100 WHAT IS THE CHECK, THEN? (I SUGGEST 'T')
41200 USER: T
41300 (IS:OF:TYPE:32 redefined)
41400
41500
41600 MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
41700 **O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
41800 **COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
41900 **LES)) (PROGN ARG1 ARG2 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FU
42000 **NCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WILL GIVE US MEANING LATER
42100 ** ON)))
42200 WHICH IS THE CODE FOR THE FUNCTION LEGAL:LEGAL:MODIFY:STRUCTURE
42300
42400 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
42500 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
42600 ** SEEN AND NAMED?
42700
42800 USER: YES
42900
43000 (CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES.
43100 SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN)
43200 OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY
43300 WANT ISNT ONE OF THESE AFTER ALL
43400 USER: CONDITIONAL:INSERTION:20
43500
43600 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
43700
43800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN LEGAL:LEGAL:MODIFY:
43900 **STRUCTURE WE SHOULD TACK ON (
44000 CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:LEGAL:STRINGS))) ,AND HERE IS W
44100 **HAT WE FINALLY DID ABOUT IT: (WE TACKED ON
44200 (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:LEGAL:STRINGS)) TO THE META
44300 **CODE OF THE BEING LEGAL:LEGAL:MODIFY:STRUCTURE))
44400
44500
44600
44700 MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
44800 **O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
44900 **COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
45000 **LES)) (PROGN (MODIFY:STRUCTURE:21 ARG1 ARG2) (MODIFY:SOME:22 ARG1 ARG2
45100 **)))
45200 WHICH IS THE CODE FOR THE FUNCTION LEGAL:ILLEGAL:MODIFY:STRUCTURE
45300 GC: 30
45400 760, 760 FREE WORDS
45500
45600 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
45700 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
45800 ** SEEN AND NAMED?
45900
46000 USER: YES
46100
46200 (CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES.
46300 SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN)
46400 OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY
46500 WANT ISNT ONE OF THESE AFTER ALL
46600 USER: CONDITIONAL:INSERTION:20
46700
46800 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
46900
47000 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN LEGAL:ILLEGAL:MODIF
47100 **Y:STRUCTURE WE SHOULD TACK ON (
47200 CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:LEGAL:STRINGS))) ,AND HERE IS W
47300 **HAT WE FINALLY DID ABOUT IT: (WE TACKED ON
47400 (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:LEGAL:STRINGS)) TO THE META
47500 **CODE OF THE BEING LEGAL:ILLEGAL:MODIFY:STRUCTURE))
47600
47700
47800
47900 MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
48000 **O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
48100 **COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
48200 **LES)) (PROGN (MODIFY:UNTIL:24 ARG1 ARG2)))
48300 WHICH IS THE CODE FOR THE FUNCTION ILLEGAL:LEGAL:MODIFY:STRUCTURE
48400
48500 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
48600 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
48700 ** SEEN AND NAMED?
48800
48900 USER: YES
49000
49100 (CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES.
49200 SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN)
49300 OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY
49400 WANT ISNT ONE OF THESE AFTER ALL
49500 USER: CONDITIONAL:INSERTION:20
49600
49700 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
49800
49900 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN ILLEGAL:LEGAL:MODIF
50000 **Y:STRUCTURE WE SHOULD TACK ON (
50100 CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS))) ,AND HERE IS
50200 ** WHAT WE FINALLY DID ABOUT IT: (WE TACKED
50300 ON (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS)) TO THE
50400 ** METACODE OF THE BEING
50500 ILLEGAL:LEGAL:MODIFY:STRUCTURE))
50600
50700
50800
50900 MOVE CURSOR TO END OF THIS BLOCK OF CODE: (PROGN (COMMENT IN ALL CALLS T
51000 **O DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PART:OF:14 ARG2)) (
51100 **COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RU
51200 **LES)) (PROGN ARG1 ARG2 (COMMENT AT PRESENT WE HAVE NO BODY FOR THIS FU
51300 **NCTION, BUT WE HAVE FAITH THAT OTHER BEINGS WILL GIVE US MEANING LATER
51400 ** ON)))
51500 WHICH IS THE CODE FOR THE FUNCTION ILLEGAL:ILLEGAL:MODIFY:STRUCTURE
51600
51700 PUP WANTS USER TO TYPE IN NAME FOR (VECTOR CONDITIONAL:INSERTION)
51800 IS THIS THE SAME AS A (VECTOR CONDITIONAL:INSERTION) WHICH WE'VE ALREADY
51900 ** SEEN AND NAMED?
52000
52100 USER: YES
52200
52300 (CONDITIONAL:INSERTION:26 CONDITIONAL:INSERTION:20) ARE SUCH NAMES.
52400 SINCE THERE IS MORE THAN ONE, TYPE IN THE NAME (AGAIN)
52500 OF ONE OF THE ABOVE OR TYPE ] IF THE NAME YOU REALLY
52600 WANT ISNT ONE OF THESE AFTER ALL
52700 USER: CONDITIONAL:INSERTION:20
52800
52900 THE NAME CHOSEN IS CONDITIONAL:INSERTION:20
53000
53100 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN ILLEGAL:ILLEGAL:MOD
53200 **IFY:STRUCTURE WE SHOULD TACK ON (
53300 CONDITIONAL:INSERTION ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS))) ,AND HERE IS
53400 ** WHAT WE FINALLY DID ABOUT IT: (WE TACKED
53500 ON (CONDITIONAL:INSERTION:20 ARG1 (QUOTE SET:OF:ILLEGAL:STRINGS)) TO THE
53600 ** METACODE OF THE BEING
53700 ILLEGAL:ILLEGAL:MODIFY:STRUCTURE))
53800
53900
54000
54100 MOVE CURSOR TO INITIAL:VALUE:OF:SET:OF:ILLEGAL:STRINGS WHICH IS LOCATED
54200 **INSIDE NIL
54300 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION GLOBAL:CONTEXT:0
54400
54500 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
54600 I NOTICE THAT WE HAVE LEFT INITIAL:VALUE:OF:SET:OF:ILLEGAL:STRINGS
54700 **UNDEFINED. IT IS LOCATED IN
54800 THE FUNCTION GLOBAL:CONTEXT:0. IN OTHER WORDS, AT THE INSTANT WE K
54900 **NOW
55000 THAT (COMMENT WE DON'T SEEM TO EVER USE ANY INITIAL KNOWLEDGE OF ARG1 IN
55100 ** ANY CRUCIAL WAY)
55200
55300 I SUSPECT THAT THE ANSWER IS (NIL).
55400 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
55500 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
55600 LATER.' GO AHEAD NOW
55700 USER: NIL
55800
55900 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING INITIA
56000 **L:VALUE:OF:SET:OF:ILLEGAL:STRINGS IN
56100 GLOBAL:CONTEXT:0 UNDEFINED; WILL BE GOTTEN LATER; PROBABLY NIL SINCE (CO
56200 **MMENT WE DON'T SEEM TO EVER USE ANY INITIAL
56300 KNOWLEDGE OF ARG1 IN ANY CRUCIAL WAY)) ,AND HERE IS WHAT WE FINALLY DID
56400 **ABOUT IT: (SET:OF:ILLEGAL:STRINGS WILL RECEIVE
56500 THE GLOBAL INITIALIZATION VALUE NIL))
56600
56700
56800
56900 MOVE CURSOR TO MODIFY:SET WHICH IS LOCATED INSIDE (PROGN (COMMENT IN ALL
57000 ** CALLS TO DATE, ARG1 IS INSTANTIATED AS (TUPLE SOME:PART:OF:14 ARG2))
57100 **(COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:R
57200 **ULES)) (MAPC MODIFY:SET (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 ILS)
57300 **(MODIFY:STRUCTURE:23 ARG1 ARG2)))))))
57400 WHICH IS THE BLOCK OF CODE FOR THE FUNCTION MODIFY:SOME:22
57500
57600 PUP: WHILE LOOKING OVER SOME POSSIBLE ERRORS IN THE CODE SO FAR,
57700 I NOTICE THAT WE HAVE LEFT MODIFY:SET UNDEFINED. IT IS LOCATED IN
57800 THE FUNCTION MODIFY:SOME:22. IN OTHER WORDS, AT THE INSTANT WE KNO
57900 **W
58000 THAT (COMMENT THESE MAKE SENSE WITH RESPECT TO THE MODIFY:CONDITION)
58100
58200 I SUSPECT THAT THE ANSWER IS (ONE OF SET:OF:LEGAL:STRINGS SET:OF:ILLEG
58300 **AL:STRINGS).
58400 PLEASE TYPE IN ONE OF THESE, OR ELSE YOUR OWN ANSWER, OR ELSE THE
58500 SINGLE WORD 'DEFER' -- WHICH MEANS 'I AM UNSURE, SO COME BACK TO THIS
58600 LATER.' GO AHEAD NOW
58700 USER: SET:OF:ILLEGAL:STRINGS
58800
58900 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (COMMENT WARNING MODIFY
59000 **:SET IN MODIFY:SOME:22 UNDEFINED; WILL BE
59100 GOTTEN LATER; PROBABLY ONE OF SET:OF:LEGAL:STRINGS SET:OF:ILLEGAL:STRING
59200 **S SINCE (COMMENT THESE MAKE SENSE WITH RESPECT
59300 TO THE MODIFY:CONDITION)) ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE
59400 ** SUBSTITUTED SET:OF:ILLEGAL:STRINGS FOR
59500 MODIFY:SET THROUGHOUT THE FUNCTION MODIFY:SOME:22 .BY THE WAY, THIS WAS
59600 **ONE OF MY SUGGESTIONS!! THE META:CODE WAS
59700 CHANGED FROM (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED
59800 **AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT
59900 IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES)) (MAP
60000 **C SET:OF:ILLEGAL:STRINGS (FUNCTION (LAMBDA
60100 (ILS) (COND ((PARSE:15 ILS) (MODIFY:STRUCTURE:23 ARG1 ARG2))))))) TO (PR
60200 **OGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS
60300 INSTANTIATED AS (TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO D
60400 **ATE, ARG2 IS INSTANTIATED AS (QUOTE SET:OF:RULES))
60500 (MAPC SET:OF:ILLEGAL:STRINGS (FUNCTION (LAMBDA (ILS) (COND ((PARSE:15 IL
60600 **S) (MODIFY:STRUCTURE:23 ARG1 ARG2)))))))))
60700
60800
60900 GC: 30
61000 721, 721 FREE WORDS
61100
61200
61300 MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
61400 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS (VECTOR TUPLE SOME:PA
61500 **RT:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 IS INSTANTIATED AS
61600 ** LS) (PROGN (ELIM:COMMON:HEAD ARG1 ARG2 (QUOTE ARG1) (QUOTE ARG2)) (EL
61700 **IM:COMMON:TAIL ARG1 ARG2 (QUOTE ARG1) (QUOTE ARG2)) (COND ((IS:OF:TYPE
61800 **:28 ARG1 ARG2 (COMMENT OK TO INCLUDE THIS COMBO AS PLAUSIBLE NEW RULE)
61900 **) (LIST (LIST ARG1 ARG2) (LIST ARG2 ARG1)))))) WHICH IS THE BODY OF TH
62000 **E FUNCTION PATTERN:MATCH:27
62100 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PATTERN:MATCH:27 WE
62200 ** SHOULD REPLACE ARG1 BY PATTERN:MATCH:27:ARG1)
62300 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PATTERN:
62400 **MATCH:27:ARG1 IN THE BEING PATTERN:MATCH:27))
62500
62600
62700
62800 MOVE CURSOR TO ARG2 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
62900 **NT IN ALL CALLS TO DATE, PATTERN:MATCH:27:ARG1 IS INSTANTIATED AS (VEC
63000 **TOR TUPLE SOME:PART:OF:14 ARG2)) (COMMENT IN ALL CALLS TO DATE, ARG2 I
63100 **S INSTANTIATED AS LS) (PROGN (ELIM:COMMON:HEAD PATTERN:MATCH:27:ARG1 A
63200 **RG2 (QUOTE PATTERN:MATCH:27:ARG1) (QUOTE ARG2)) (ELIM:COMMON:TAIL PATT
63300 **ERN:MATCH:27:ARG1 ARG2 (QUOTE PATTERN:MATCH:27:ARG1) (QUOTE ARG2)) (CO
63400 **ND ((IS:OF:TYPE:28 PATTERN:MATCH:27:ARG1 ARG2 (COMMENT OK TO INCLUDE T
63500 **HIS COMBO AS PLAUSIBLE NEW RULE)) (LIST (LIST PATTERN:MATCH:27:ARG1 AR
63600 **G2) (LIST ARG2 PATTERN:MATCH:27:ARG1)))))) WHICH IS THE BODY OF THE FU
63700 **NCTION PATTERN:MATCH:27
63800 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PATTERN:MATCH:27 WE
63900 ** SHOULD REPLACE ARG2 BY PATTERN:MATCH:27:ARG2)
64000 ,AND HERE IS WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG2 BY PATTERN:
64100 **MATCH:27:ARG2 IN THE BEING PATTERN:MATCH:27))
64200
64300
64400
64500 MOVE CURSOR TO ARG1 WHICH IS LOCATED IN THE BLOCK OF CODE: (PROGN (COMME
64600 **NT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:6) (PROGN ARG
64700 **1 (COMMENT THIS APPEARANCE OF ARG1 IS JUST TO NUDGE PUP5 INTO NOTING I
64800 **TS INSTANTIATION HERE IN THE CODE) (SETQ PARSE:TREE NIL) (SETQ RULES:U
64900 **SED NIL) (SETQ ARG1 (SOME:PART:OF:14 ARG1)) (FOREACH:16 S1 IN SET:OF:L
65000 **EGAL:STRINGS DO (OR (PARSE:FORWARD:17 S1 ARG1 2) (PARSE:BACKWARD:18 S1
65100 ** ARG1 3))))) WHICH IS THE BODY OF THE FUNCTION PARSE:15
65200 PUP: (PUP WORKED ON SOMETHING IMPROBABLE, NAMELY (IN PARSE:15 WE SHOULD
65300 **REPLACE ARG1 BY PARSE:15:ARG1) ,AND HERE IS
65400 WHAT WE FINALLY DID ABOUT IT: (WE REPLACED ARG1 BY PARSE:15:ARG1 IN THE
65500 **BEING PARSE:15))
65600
65700 NEAR END OF TASK -- INTERRUPT? Y
65800 REQUEST: (LISPXSTAAT\T\ATS)
65900 (20 LISPX INPUTS)
66000 (2872 UNDO SAVES)
66100
66200 (1 CALLS TO EDITOR)
66300 (8 EDIT COMMANDS)
66400 (2 EDIT UNDO SAVES)
66500
66600
66700
66800
66900 OF THOSE DUE TO ERRORS:
67000
67100 OF THE CALLS DUE TO DWIMIFYING:
67200
67300
67400
67500
67600
67700
67800 (2:10:23 CONSOLE TIME)
67900 (0:1:22 OF IT IN THE EDITOR)
68000
68100 (0:45:15 CPU TIME)
68200 (0:0:0 OF IT IN DWIM)
68300 T
68400 REQUEST: WHAT
68500 (WRITE A PROGRAM WHICH DOES (GRAMMATICAL:INFERENCE))
68600 REQUEST: CH
68700 NIL *** WRITE:PROGRAM *** (SERVE)
68800 REQUEST: WHY
68900 (FUNDAMENTAL DRIVE TO OBEY USER; ALSO, IT IS NECESSARY THAT CODE BE WRIT
69000 **TEN TO DO (GRAMMATICAL:INFERENCE) IN ORDER
69100 THAT THE TASK (GRAMMATICAL:INFERENCE) MIGHT BE COMPLETED; ALSO, EXAMINE
69200 **SPEC:WHY)
69300 REQUEST: SPEC:WHY
69400 (WE CALL THE FIRST BEING WHICH CAN BRING ABOUT THE EFFECT (TYPE OF ((GRA
69500 **MMATICAL:INFERENCE) HAS BEEN STUDIED)))
69600 REQUEST: HOW
69700 (CREATE SPECIALIZED LISP CODE WHICH WILL DO (GRAMMATICAL:INFERENCE))
69800 REQUEST: WHEN
69900 ((T (COND ((MEMBER TASK ABLE:PUP:LIST) -75) (T 40)) (BECAUSE A PRE:EXIST
70000 **ING ABILITY TO DO (@ TASK) IMPLIES THAT WRITING
70100 A NEW PROGRAM TO ACCOMPLISH IT IS SUPERFLUOUS AND, CONVERSELY, THE INABI
70200 **LITY TO DO (@ TASK) ABDUCTIVELY ENCOURAGES
70300 US THAT WE ARE ON THE RIGHT TRACK)) ((MEMBER TASK WRITTEN:PROGRAMS:LIST)
70400 ** -80 (QUOTE (BECAUSE WE ARE NOT AFTER MUCH
70500 EFFICIENCY, AND IF A PROGRAM ALREADY EXISTS, THEN WE SHOULD USE IT))) ((
70600 **MEMBER (PUP IS ABOUT TO WRITE A PROGRAM TO
70700 DO (@ TASK)) AWARE:USER:LIST) 70 (QUOTE (BECAUSE WE GO BY THE OLD ENGLIS
70800 **H LEGAL RULE, THAT SILENCE SIGNIFIES APPROVAL)))
70900 (T (COND (NEW:INFO:LIST -120) (T 40)) (QUOTE (BECAUSE WE SHOULD USE UP T
71000 **HE NEW INFORMATION BEFORE WRITING PROGRAMS
71100 ALSO: BECAUSE IF NO NEW INFO IS PRESENT, THEN WE NEEDN'T FEEL GUILTY ABO
71200 **UT STARTING TO WRITE A PROGRAM))))
71300 REQUEST: SPEC:WHEN
71400 ((T IS T SO WE DO ADD IN THE WEIGHT (COND ((MEMBER TASK ABLE:PUP:LIST) -
71500 **75) (T 40)) WHICH IN THE CURRENT CASE IS 40
71600 ;THE EXPLANATION IS (BECAUSE A PRE:EXISTING ABILITY TO DO (VECTOR GRAMMA
71700 **TICAL:INFERENCE) IMPLIES THAT WRITING A NEW
71800 PROGRAM TO ACCOMPLISH IT IS SUPERFLUOUS AND, CONVERSELY, THE INABILITY T
71900 **O DO (VECTOR GRAMMATICAL:INFERENCE) ABDUCTIVELY
72000 ENCOURAGES US THAT WE ARE ON THE RIGHT TRACK)) ((MEMBER TASK WRITTEN:PRO
72100 **GRAMS:LIST) IS NIL SO WE DONT ADD IN THE WEIGHT
72200 -80 WHICH IN THE CURRENT CASE IS -80 ;THE EXPLANATION IS (BECAUSE WE ARE
72300 ** NOT AFTER MUCH EFFICIENCY, AND IF A PROGRAM
72400 ALREADY EXISTS, THEN WE SHOULD USE IT)) ((MEMBER (TUPLE PUP IS ABOUT TO
72500 **WRITE A PROGRAM TO DO (@ TASK)) AWARE:USER:LIST)
72600 IS NIL SO WE DONT ADD IN THE WEIGHT 70 WHICH IN THE CURRENT CASE IS 70 ;
72700 **THE EXPLANATION IS (BECAUSE WE GO BY THE OLD
72800 ENGLISH LEGAL RULE, THAT SILENCE SIGNIFIES APPROVAL)) (T IS T SO WE DO A
72900 **DD IN THE WEIGHT (COND (NEW:INFO:LIST -120)
73000 (T 40)) WHICH IN THE CURRENT CASE IS 40 ;THE EXPLANATION IS (BECAUSE WE
73100 **SHOULD USE UP THE NEW INFORMATION BEFORE WRITING
73200 PROGRAMS ALSO: BECAUSE IF NO NEW INFO IS PRESENT, THEN WE NEEDN'T FEEL G
73300 **UILTY ABOUT STARTING TO WRITE A PROGRAM)))
73400 (THE FINAL WHEN VALUE IS THUS 80)
73500 REQUEST: QUIT
73600
73700 MOVE CURSOR TO NIL
73800 PUP: SORRY TO BOTHER YOU, BUT I CAN NO LONGER DEFER THIS ADAPTATION DECI
73900 **SION:(DESIRED DIALOGUE BETWEEN GI:1 AND ITS
74000 USERS)
74100
74200 HERE I WILL EVENTUALLY ASK FOR A SAMPLE DIALOGUE AND USE IT TO
74300 DETERMINE ALL THE FORMATS, AND TO CHECK ALL THE CODE. NOT IN YET
74400 SORRY, I AM INSERTING THE PRINT STATMENTS BY OMNISCIENCE
74500 GC: 8
74600 12845, 12845 FREE WORDS
79200 (IS:OF:TYPE:32 redefined)
79400 (IS:OF:TYPE:31 redefined)
79500 (SOME:PART:OF:14 redefined)
79600 (SOME:PART:OF:13 redefined)
79700 (ILLEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
79800 (LEGAL:LEGAL:MODIFY:STRUCTURE redefined)
79900 (CONDITIONAL:DELETION:30 redefined)
80000 (MODIFY:STRUCTURE:25 redefined)
80100 (CONDITIONAL:DELETION:29 redefined)
80200 (MODIFY:STRUCTURE:23 redefined)
80300 (IS:OF:TYPE:28 redefined)
80400 (PATTERN:MATCH:27 redefined)
80500 (CONDITIONAL:INSERTION:26 redefined)
80600 (MODIFY:STRUCTURE:21 redefined)
80700 (MODIFY:UNTIL:24 redefined)
80800 (ILLEGAL:LEGAL:MODIFY:STRUCTURE redefined)
80900 (MODIFY:SOME:22 redefined)
81000 (LEGAL:ILLEGAL:MODIFY:STRUCTURE redefined)
81100 (CONDITIONAL:INSERTION:20 redefined)
81200 (PARSE:BACKWARD:18 redefined)
81300 (APPLYRULE:19 redefined)
81400 (PARSE:FORWARD:17 redefined)
81500 (FOREACH:16 redefined)
81600 (PARSE:15 redefined)
81700 (TAKE:HOLD:OF:11 redefined)
81800 (COMPLEX:MODIFY:STRUCTURE:10 redefined)
81900 (TAKE:HOLD:OF:9 redefined)
82000 (GET:HOLD:OF:8 redefined)
82100 (TAKE:HOLD:OF:5 redefined)
82200 (IS:OF:TYPE:7 redefined)
82300 (ELEMENT:6 redefined)
82400 (UNCOMMENTED:STRING:12 redefined)
82500 (PAD:4 redefined)
82600 (RULE redefined)
82700 (INFER:PHRASESTRUCTURE:GRAMMARS:3 redefined)
82800 (IFG:2 redefined)
82900 (GI:1 redefined)
83000 INTERRUPT? Y
83100 REQUEST: CH
83200 NIL *** SUPPORT&DUMP *** (WRITE:PROGRAM SERVE)
83300 REQUEST: WHAT
83400 (GATHER UP SUPPORTING BEINGS AND DUMP OUT GI:1 SYSTEM)
83500 REQUEST: OLDER
83600 WRITE:PROGRAM
83700 REQUEST: CH
83800 (SUPPORT&DUMP) *** WRITE:PROGRAM *** (SERVE)
83900 REQUEST: OLDER
84000 SERVE
84100 REQUEST: CH
84200 (SUPPORT&DUMP WRITE:PROGRAM) *** SERVE *** NIL
84300 REQUEST: WHAT
84400 (DO ANYTHING THE USER ASKS)
84500 REQUEST: WHY
84600 (FUNDAMENTAL DRIVE TO SERVE THE USER)
84700 REQUEST: HOW
84800 (GET A TASK FROM THE USER)
84900 REQUEST: YOUNGEST
85000 SUPPORT&DUMP
85100 REQUEST: CH
85200 NIL *** SUPPORT&DUMP *** (WRITE:PROGRAM SERVE)
85300 REQUEST: (AND (SETQ PREADLIST DIALOG)(GI:1))
85400 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
85500 0
85600
85700 MY GUESS FOR THIS IS ILLEGAL
85800 u.b.a.
85900 (-232:ILLEGAL:MODIFY:STRUCTURE broken)
86000 :PRET(GI:1 T)
86100 T
86200 REQUEST: (MAPC GLOBAL:INITIALIZATION:LIST EVAL)
86300 NIL
86400 REQUEST: (GI:1)
86500 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
86600 (LEGAL N M)
86700
86800 MY GUESS FOR THIS IS ILLEGAL
86900 LEGAL
87000 ((S) (N M))
87100
87200 ILLEGAL
87300 NIL
87400
87500
87600 SET:OF:RULES
87700 (((N M) (S)) ((S) (N M)))
87800 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
87900 (LEGAL S)
88000
88100 MY GUESS FOR THIS IS LEGAL
88200 (COMMENT INFINITE LOOP IN THIS PROG)
88300 REQUEST: (GI:1)
88400 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
88500 2
88600
88700 MY GUESS FOR THIS IS ILLEGAL
88800 u.b.a.
88900 (#13527:ILLEGAL:MODIFY:STRUCTURE broken)
89000 :PRET(GI:1 T)
89100 T
89200 REQUEST: (GI:1)
89300 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
89400 (??? N K)
89500
89600 MY GUESS FOR THIS IS ILLEGAL
89700 (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
89800 LEGAL
89900 LEGAL
90000 ((S) (N M) (N K))
90100
90200 ILLEGAL
90300 NIL
90400
90500
90600 SET:OF:RULES
90700 (((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
90800 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
90900 (??? N N)
91000
91100 GC: 8
91200 10500, 10500 FREE WORDS
91300
91400 MY GUESS FOR THIS IS ILLEGAL
91500 (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
91600 ILLEGAL
91700 LEGAL
91800 ((S) (N M) (N K))
91900
92000 ILLEGAL
92100 ((N N))
92200
92300
92400 SET:OF:RULES
92500 (((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
92600 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
92700 (ILLEGAL M N)
92800
92900 GC: 8
93000 10497, 10497 FREE WORDS
93100
93200 GC: 8
93400 10478, 10478 FREE WORDS
95000
95100 MY GUESS FOR THIS IS ILLEGAL
95200 LEGAL
95300 ((S) (N M) (N K))
95400
95500 ILLEGAL
95600 ((N N) (M N))
95700
95800
95900 SET:OF:RULES
96000 (((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
96100 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
96200 (LEGAL S)
96300
96400 MY GUESS FOR THIS IS LEGAL
96500 (COMMENT INFINITE LOOP IN THIS PROG)
96600 REQUEST: QUIT
96700
96800 PUP: (FILE GI HAS BEEN MADE AND WILL SUPPORT BEING GI:1)
96900
97000
97100 PUP: (THE PROGRAM GI:1 TO DO (GRAMMATICAL:INFERENCE) IS COMPLETE)
97200
97300
97400
97500
97600 FINISHED CURRENT SERVICE; WHAT SHOULD I DO? TYPE ONE OF:
97700
97800 1 EXIT FROM SYSTEM
97900 2 CONTINUE SERVING, AS BEFORE
98000 3 CONTINUE SERVING, BUT GET A NEW USER INTERRUPT LEVEL
98100 4 REINITIALIZE SYSTEM AND START FROM BEGINNING AGAIN
98200
98300 OK, GO .......... π
01100 (0:49:18 CPU TIME)
01200 (0:0:0 OF IT IN DWIM)
01300 T
01400 :GIFNS
01500 (START)
01600 :GICOMS
01700 ((FNS * GIFNS) SET:OF:BEINGS IS:BEING:LIST ASSERT:LISTS GLOBAL:INITIALIZ
01800 **ATION:LIST OLD:PREADLIST SB EXPERTAG YESNO:TAG
01900 TASK:TYPE ARG1 ARG2 (COMS * (LIST (APPEND (QUOTE (PROP ALL)) (SETDIFFERE
02000 **NCE IS:BEING:LIST SB)))) (P (MAPC (SETDIFFERENCE
02100 IS:BEING:LIST SB) (FUNCTION (LAMBDA (B) (SET B B) (SEMI:COMPILE B)))) (M
02200 **APC GLOBAL:INITIALIZATION:LIST (QUOTE EVAL))
02300 (PRINT (COMMENT TO AUTOMATICALLY ENTER THE FUNCTION GI:1 ,JUST TYPE IN A
02400 ** CALL TO THE FUNCTION ENTER. THIS WILL
02500 INITIALIZE THE ENTIRE BEINGS SYSTEM AND THEN CALL GI:1))))
02600 :LOGOUT)
02700 @DIR
02800 1-SEP-74 22:58
02900
03000 <LENAT>
03100 AIR. ;1
03200 AIRF. ;7
03300 EVEN. ;2
03400 GI . ;2,1
03500 GIF. ;4,3
03600 GV . ;8
03700 H . ;1
03800 JOBINI.[EXEC];3
03900 MIN. ;6
04000 P6 . ;8
04100 PUP6. ;2
04200 .COM;2
04300 SD . ;5
04400 STOR.W ;1
04500 .L ;6
04600
06800 @LISP
06900
07000
07100 INTERLISP-10 29-AUG-74 ...
07200
07300
07400 Good evening, Doug.
07500 ←LOAD(STOR.L)
07600 FILE CREATED 1-SEP-74 16:25:45
07700 STORCOMS
07800
07900 GC: 1
08000 1494, 6102 FREE WORDS
08100
08200 GC: 8
08300 5028, 75035 FREE WORDS
08400
08500 GC: 12
08600 1011, 2201 FREE WORDS
08700
08800 GC: 28
08900 2031, 5103 FREE WORDS
09000
09100 GC: 30
09200 497, 3057 FREE WORDS
09300
09400 TYPE USED ASSIGNED SYSTEM
09500 1 42 6144 34816
09600 2 5120 5120 55296
09700 4 0 512 512
09800 8 595 75776 16384
09900 12 27 6656 13824
10000 16 0 512 512
10100 18 6 1536 1024
10200 24 4 512 1024
10300 28 17 5120 8704
10400 30 14 3072 2560
10500 SUM 5825 104960 134656
10600 STOR.L;6
10700 ←LOAD(PUP6.COM)
10800 COMPILED ON 1-SEP-74 16:03:51
10900 FILE CREATED 1-SEP-74 15:51:05
11000 (LISTFILES redefined)
11100
11200 GC: 1
11300 2608, 2608 FREE WORDS
11400
11500 GC: 1
11600 1380, 1380 FREE WORDS
11700
11800 GC: 1
11900 491, 491 FREE WORDS
12000
12100 GC: 1
12200 400, 400 FREE WORDS
12300
12400 GC: 1
12500 212, 724 FREE WORDS
12600
12700 GC: 1
12800 396, 396 FREE WORDS
12900
13000 GC: 1
13100 213, 213 FREE WORDS
13200 PUP6COMS
13300
13400 GC: 16
13500 0, 512 FREE WORDS
13600
13700 DWIM DISABLED. TO GET AUTOMATIC EDITF FROM SOURCE, TYPE DWIM(T)
13800 MINI PUP FILE; USE FAD OR AD OR MAKEFILE PUP6COMS
13900 (PUP6COMS reset)
14000 PUP6.COM;2
14100 ←LISPXSTATS)
14200 (3 LISPX INPUTS)
14300 (2660 UNDO SAVES)
15800 (0:6:24 CONSOLE TIME)
15900 (0:0:0 OF IT IN THE EDITOR)
16000
16100 (0:2:15 CPU TIME)
16200 (0:0:0 OF IT IN DWIM)
16300 T
16400 ←STORAGE(T)
16500
16600 TYPE USED ASSIGNED SYSTEM
16700 1 6559 6656 34816
16800 2 5120 5120 55296
16900 4 23 512 512
17000 8 41591 75776 16384
17100 12 5967 6656 13824
17200 16 512 1024 512
17300 18 421 1536 1024
17400 24 273 512 1024
17500 28 5077 5120 8704
17600 30 2712 3072 2560
17700 SUM 68255 105984 134656
17800 NIL
18100 ←LOAD(GI)
18200 FILE CREATED 1-SEP-74 22:53:11
18300 GICOMS
18400 (START redefined)
18500
18600 GC: 28
18700 20, 532 FREE WORDS
18800 (SET:OF:BEINGS reset)
18900 (IS:BEING:LIST reset)
19000 (ASSERT:LISTS reset)
19100 (ARG1 reset)
19200 (COMMENT TO AUTOMATICALLY ENTER THE FUNCTION GI:1 ,JUST TYPE IN A CALL T
19300 **O THE FUNCTION ENTER. THIS WILL INITIALIZE
19400 THE ENTIRE BEINGS SYSTEM AND THEN CALL GI:1)
19500 GI.;2
19600 ←LISPXSTATS)
19700 (7 LISPX INPUTS)
19800 (3377 UNDO SAVES)
21300 (0:11:16 CONSOLE TIME)
21400 (0:0:0 OF IT IN THE EDITOR)
21500
21600 (0:2:56 CPU TIME)
21700 (0:0:0 OF IT IN DWIM)
21800 T
21900 ←STORAGE(T)
22000
22100 TYPE USED ASSIGNED SYSTEM
22200 1 6559 6656 34816
22300 2 5120 5120 55296
22400 4 23 512 512
22500 8 53517 75776 16384
22600 12 6432 7168 13824
22700 16 579 1024 512
22800 18 449 1536 1024
22900 24 289 512 1024
23000 28 5306 5632 8704
23100 30 2920 3072 2560
23200 SUM 81194 107008 134656
23300 NIL
23400 ←ENTER(T)
23500
23600 GC: 8
23700 18675, 18675 FREE WORDS
23800
23900 I CAN GUESS ALL YOUR ANSWERS FOR A WHILE; SHOULD I? YES
24000 USER INTERRUPT LEVEL... 0
24100 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
28000 (LEGAL N M)
28100
28200 MY GUESS FOR THIS IS ILLEGAL
28300 LEGAL
28400 ((S) (N M))
28500
28600 ILLEGAL
28700 NIL
28800
28900
29000 SET:OF:RULES
29100 (((N M) (S)) ((S) (N M)))
29200 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
29300 (LEGAL S)
29400
29500 MY GUESS FOR THIS IS LEGAL
29600
29700
29800
29900 FINISHED CURRENT SERVICE; WHAT SHOULD I DO? TYPE ONE OF:
30000
30100 1 EXIT FROM SYSTEM
30200 2 CONTINUE SERVING, AS BEFORE
30300 3 CONTINUE SERVING, BUT GET A NEW USER INTERRUPT LEVEL
30400 4 REINITIALIZE SYSTEM AND START FROM BEGINNING AGAIN
30500
30600 OK, GO .......... 2
30700 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
30800 (??? N K)
30900
31000 MY GUESS FOR THIS IS ILLEGAL
31100 (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
31200 LEGAL
31300 LEGAL
31400 ((S) (N M) (N K))
31500
31600 ILLEGAL
31700 NIL
31800
31900
32000 SET:OF:RULES
32100 (((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
32200 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
32300 (??? N N)
32400
32500 MY GUESS FOR THIS IS ILLEGAL
32600 (COMMENT READY TO ACCEPT CORRECT NEW NAME:OF:CLASS)
32700 ILLEGAL
32800 LEGAL
32900 ((S) (N M) (N K))
33000
33100 ILLEGAL
33200 ((N N))
33300
33400
33500 SET:OF:RULES
33600 (((N K) (S)) ((S) (N K)) ((K) (M)) ((M) (K)))
33700 (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:6)
33800 (ILLEGAL M N)
33900
34000 GC: 8